• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【ASP.NET MVC】更新アクション)

【ASP.NET MVC】更新アクションの作り方について

このQ&Aのポイント
  • ASP.NET MVCのコントローラで、フォーム送信を受けて動作する更新アクションの基本的な作り方について説明します。
  • 更新アクションでは、入力内容の検証やデータベースの更新を行います。フォーム値の検証や複雑な検証の追加方法、見通しの良いコードの書き方についても解説します。
  • その他、TempDataを使用してエラーやメッセージを表示する方法や、更新処理を別のメソッドに分割する方法についても紹介します。

質問者が選んだベストアンサー

  • ベストアンサー
  • shockatz
  • ベストアンサー率80% (153/191)
回答No.2

こんにちは ■全体の流れ 検証NG、検証OK->更新OK、検証OK->更新NGと、きちんと処理が書かれているので、よくまとまっていると思います。 onosさんはViewBagでメッセージを返すように仰っていますがRedirectのように画面が遷移して、遷移後にメッセージを表示しなければいけない場合には、TempDataのほうが便利です(nayutaxさんのコードで気づきました^^; これ賢いやり方ですね) ■フォーム値の検証 モデルバインディングまで踏込むと大事になるので(笑、ここはカスタム検証を定義すればいいと思います。記述的にもすっきりするし。 http://cs.gogo-asp.net/blogs/naoki/archive/2010/07/02/ASP.NET-MVC-2-_6730AB30B930BF30E0305E5C27606E305C4F106268300130AF30E930A430A230F330C830B530A430C9301C693C8A6E30DD30A430F330C830_.aspx 文献はMVC2ですが、そのまま動きます。 ASP.NET MVC3だと、確かクライアント検証が大幅に拡張されているはずですがそこまで調べてない(^^; ■コントローラメソッドの拡張 ここはやはり、IoCでしょう。 単体テストもできるようになるし、堅牢になるし、捗りますよ。 http://david9142.wordpress.com/2012/07/13/asp-net-mvc%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9%E3%82%92%E8%80%83%E3%81%88%E3%81%A6%E3%81%BF%E3%81%9F1/ ですかね。

nayutax
質問者

お礼

shockatzさま、いつも有難うございます。 今回も有効なコンテンツを教えていただき、感謝雨あられです。 最後の「コントローラメソッドの拡張」ですが、全く理解できませんでした!(苦笑 お恥かしい限りです。 こういう記事に敬服するとともに、精進します!

その他の回答 (1)

  • onos
  • ベストアンサー率81% (127/155)
回答No.1

まず、TempDataは使い方を間違ってるように思います。 TempDataというのは一種のSession変数ですので、ビューにデータを渡すのに使うというのはおかしいかと。 使うならViewBagかな? MVCのバージョンによってはViewBagが使えないので、そのときはViewDataかなぁ。 あと、1つめと3つめの質問はある意味同じ回答になるかと。 サンプルとかだとコントローラにいろんな処理いれてしまいがちですが、コントローラはできるだけ薄くするべき、という考え方があったりします。 で、どうするか、というのは、、、そうですねぇ。MVCパターンの話を追いかけてみるとか、かなぁ。 責務をきちんと切り分けてクラスを設計しましょう、とかそういう話になるはず。 検証については、アクションの呼び出しの時点で行われているのはモデルバインダーがやってくれている部分です。 デフォルトのモデルバインダーを使うのではなく、独自のモデルバインダーを使うという方法が一つあります。 そのほうがうえで書いた責務をわける、という意味ではいいようにも思いますが。 コントローラーの中でやるべきかどうかは別として、検証プログラム書いて結果をModelStateに埋めこんでViewに渡すようなこともできます。 とりあえずはそんなとこですかね。

nayutax
質問者

お礼

onos様、いつもありがとうございます。 ViewBagの件ですが、やはりコントローラからViewに返すのが正しい道でしょうね。 ご指摘ありがとうございます。 独自のモデルバインダの件、前回もご指摘いただいています。 正直難しくてよくわかりません。 こういうタイプの検証は頻繁に発生しそうなので、頭が痛いです。

関連するQ&A

専門家に質問してみよう