[解決済み】ViewModelのベストプラクティス
質問
から この質問 を作成するのは理にかなっているように見えます。 ViewModel しかし、私はいくつかの規則について興味があります (まだ明白でないとしても、私は MVC パターンの初心者です)。
基本的には、以下のような疑問がありました。
- 私は通常、1つのクラス/ファイルを持ちたいと思っています。 これは ViewModel もし、コントローラからビューにデータを渡すためだけに作成されるのであれば?
- もし ViewModel は独自のファイルに属し、ディレクトリやプロジェクト構造で分離している場合、そのファイル内の ビューモデル ファイルはどのようなものでしょうか? それは コントローラ ディレクトリを作成しますか?
基本的には今のところこれで終わりです。 私はいくつかのより多くの質問が来るかもしれませんが、これは最後の時間かそこらで私を悩ませている、私は他の場所で一貫した指導を見つけることができるようです。
EDITです。 サンプルを見てみると NerdDinnerアプリ にあるように、ViewModels は コントローラ しかし、独自のファイルでないことに違和感を覚えます。
解決方法は?
私は、各ビューのために"ViewModel"と呼ぶものを作成します。それらをMVC WebプロジェクトのViewModelsと呼ばれるフォルダに配置します。これらのモデルには、コントローラやアクション (またはビュー) の名前を付けています。例えば、Membership コントローラの SignUp ビューにデータを渡す必要がある場合、 MembershipSignUpViewModel.cs クラスを作成し、ViewModels フォルダに格納します。
そして、コントローラからビューへのデータ転送を容易にするために、必要なプロパティとメソッドを追加します。ViewModel から Domain Model へ、また必要に応じて Automapper を使ってデータを転送しています。
これは、他のViewModelsの型を持つプロパティを含む複合ViewModelsにも有効です。例えば、メンバーシップコントローラのインデックスページに 5 つのウィジェットがあり、それぞれの部分ビューに対して ViewModel を作成した場合、インデックスアクションから部分ビューにデータを渡すにはどうすればよいでしょうか。MembershipIndexViewModel に MyPartialViewModel タイプのプロパティを追加し、パーシャルをレンダリングする際に Model.MyPartialViewModel を渡します。
このようにすることで、Indexビューを全く変更することなく、部分的なViewModelのプロパティを調整することができます。また、Model.MyPartialViewModel を渡すだけなので、部分 ViewModel にプロパティを追加するだけなのに、何かを修正するために部分ビューのチェーン全体を通さなければならない可能性も少なくなります。
また、名前空間 "MyProject.Web.ViewModels" を web.config に追加して、各ビューで明示的に import 文を追加しなくても、どのビューでもそれらを参照できるようにする予定です。これで少しすっきりしました。
関連
-
[解決済み] glyphicons-halflings-regular.woff2 not foundに関するエラーを削除する方法
-
[解決済み] プロジェクトのデフォルトのXMLネームスペースはMSBuild XMLネームスペースである必要があります。
-
[解決済み] MVCにおけるViewModelとは?
-
[解決済み】ASP.NET MVC 3 razor ViewStart ファイルで異なるレイアウトを指定するには?
-
[解決済み] [Solved] Replace line break characters with <br /> in ASP.NET MVC Razor view
-
[解決済み】ASP.NET MVCのフォームでチェックボックスを処理するにはどうすればよいですか?
-
[解決済み] [Solved] ASP.NET MVCコントローラメソッドからJSON.NETでシリアライズされたcamelCase JSONを返すにはどうすればよいですか?
-
[解決済み】AutoMapper.CreateMapsをどこに配置するか?
-
[解決済み] MVCとRazorにおけるHtml.TextboxForとHtml.EditorForの相違点
-
[解決済み] HTMLヘルパーでURLを生成する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] glyphicons-halflings-regular.woff2 not foundに関するエラーを削除する方法
-
[解決済み] Entity Framework Code Firstを使用して一意制約を設定することは可能ですか?
-
[解決済み] RedirectToActionでURLが変更されない、またはIndexビューに移動しない
-
[解決済み】ASP.NET MVC 3 RazorでAjax.BeginFormを使用する。
-
[解決済み】ASP.NET MVCのルートをサブドメインに基づいて作成することは可能ですか?
-
[解決済み] ASP.NET MVCでリクエストスロットルを実装するための最良の方法は?
-
[解決済み】jQuery Ajaxの呼び出しとHtml.AntiForgeryToken()について)
-
[解決済み] アクションリンクでエリア名を指定するには?
-
[解決済み] Razorを使ってエンコードされていないJsonをViewに書き込むにはどうしたらいいですか?
-
[解決済み] Visual Studio 2012 または Visual Studio 2013 で古い MVC プロジェクトを開くにはどうすればよいですか?