0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Actionメソッドと画面遷移

Last updated at Posted at 2020-07-26

ASP.NETでの画面遷移

この記事ではわかりやすさなどは追求せず、備忘録的に内容をまとめていきます。

元画面に戻す場合は?

自分が分からなくなっていたのは元画面に戻る処理の実装方法です。

例えばショッピングサイトでアカウントを作成するとき、

アカウント情報を入力画面に記入する。
送信ボタンをクリック!

問題がなければ次の画面に遷移します
だけど、あれ?入力内容ちょっとまずいじゃん!いろいろ必須事項漏れてるし、使用禁止文字使ってるし、、、
よしっ、*元の入力画面に戻しちゃえ!*ついでにどこがまずいかのメッセージも表示しちゃえ!

て場合です。
例えばアカウント作成のときにこんな画面の遷移をします。

では、画面の間を繋ぐコントローラーではどう実装すべきでしょうか?特に元の画面に戻す場合は何をリターンするのが正解でしょうか?

if(/*エラーがある場合*/)
{
/*何か処理*/ 

/*戻り値は何?*/
}else/*入力にエラーがないとき*/
{
/*何か処理*/ 

/*戻り値は何?*/
}

結論 Viewメソッドを使え!

結論から言えばViewメソッドを使うが正解です。とりあえず画面遷移をさせたいならViewメソッドです!← これは言い過ぎ?

わからなかった原因

しかし最初、Viewメソッドを使うことがわかりませんでした。
その原因はViewメソッドはそのメソッド名と同じ名前のViewに遷移させるものと思っていたからです。そして、View以外(RedirectToActionとか?)の場合はモデルに付与した検証用のアノテーションが意味をなさなくなります。

Indexメソッド内でView→Index.cshtml

みたいな感じ

Viewメソッドは返すView名を指定できる

ViewメソッドはオーバーロードでView名を指定するオーバーロードも用意されています。
なので、

if(/*エラーがある場合*/)
{
/*何か処理*/ 

return View(“前画面”,xxx);
}else/*入力にエラーがないとき*/
{
/*何か処理*/ 

return View(“次画面”,yyy);
}

xxxとかyyyにはViewに渡したいモデルのインスタンスが入ります。

なので、画面遷移でViewメソッドを使ってどのViewにも返すことができました。
Viewでも検証用の属性を使えます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?