最初の状況は、ドメイン モデルをプレゼンテーション モデルにマッピングすることです。
テキストボックスとドロップダウンリストを使用して更新/作成式を表示する必要があります。
ビューモデルにドロップダウンリストのリストを含める必要がありますか、それとも ViewData を使用してドロップダウンリストのデータを渡す必要がありますか?
ViewData を使用する必要がある場合と使用しない場合はいつですか?
ドロップダウン リストなどの入力フィールドには、別のビュー モデルがありますか?
最初の状況は、ドメイン モデルをプレゼンテーション モデルにマッピングすることです。
テキストボックスとドロップダウンリストを使用して更新/作成式を表示する必要があります。
ビューモデルにドロップダウンリストのリストを含める必要がありますか、それとも ViewData を使用してドロップダウンリストのデータを渡す必要がありますか?
ViewData を使用する必要がある場合と使用しない場合はいつですか?
ドロップダウン リストなどの入力フィールドには、別のビュー モデルがありますか?
常に値をキャストする必要があり、null または存在しないキーのエラーチェックを行う必要があり、ビューが乱雑になるため、私は ViewData をできるだけ使用しないようにしています。
ビューをモデルに強く型付けする方がクリーンなアプローチだと思うので、可能な限りビューモデルを使用する傾向があります。
できるだけ多くのデータをビューモデルに入れますが、意味のあるものだけにします。ビューモデルに属してはならないデータについては、ViewData として渡しますが、量を最小限に抑えようとします。
あなたが入力フィールドについて質問する限り、それらがすべて関連している場合、ViewData で 5 つまたは 10 個のデータを渡す代わりに、そのための ViewModel を作成します。論理的に 1 つの場所にグループ化することが理にかなっているからです。これは好みの問題ですが、私はこの方法がベストだと思いました。
NerdDinner、特にDinnerFormViewModelと選択する国のリストを確認することをお勧めします。基本的に、Dinnerモデル(コレクションが必要なインデックスビューに使用)に加えて、国の単一のDinnerインスタンスとSelectListを含むDinnerFormViewModelがあります。もちろん、作成ビュー(適切な名前はDinnerForm)は強く型付けされ、DinnerFormViewModelを取ります。
それは本当に個人的な選択です。ViewData の欠点は、型付けが弱く、キャストが必要なことです。
ここで非常に興味深いものを見つけました... http://weblogs.asp.net/rashid/archive/2009/11/27/extending-asp-net-mvc-2-templates.aspx
まさに私が必要とするもの。
モデルの一部としてリストを渡す必要があります。または、リストがかなり普及している場合 (状態のリストやはい/いいえリストなど)、ViewPage で直接参照できる静的クラスに静的リストを作成できます。ViewPage でリストをキャストする必要があるため、ViewData 経由で渡したい理由がわかりません。