38

私は MVC4、EF5、および ASP.Net にかなり慣れていないため、適切な答えがどこにも見つからないようです。

基本的に、ビューモデルを介してすべてを行う必要がありますか、それともビューバッグを組み込んでも問題ありませんか?

ドロップダウン リストにデータを入力するメソッドがあり、viewmodel を使用してビューの出力を表しているとします。

使用してもよろしいですか、それとも作成者Viewbag.DropDown = PopulateDropdown();を保持するプロパティを作成して、これを ViewModel に組み込む方がよいでしょうか?List<SelectListItem>PopulateDropdown();

ViewBag がいかに便利かは知っていますが、使用しない確固たる理由がまだありません。誰かが私にもう少し洞察を提供してくれたら、それは素晴らしいことです.

4

2 に答える 2

55

基本的に、ビューモデルを介してすべてを行う必要がありますか、それともビューバッグを組み込んでも問題ありませんか?

ビューモデル内ですべてを行う必要があります。それがビューモデルです。ビューの要件を満たすために具体的に定義するクラス。ViewBags と ViewModel を混在させないでください。情報がどこから来ているのか、ビューにとってもはや明確ではありません。ビュー モデル (私が推奨するアプローチ) のみを使用するか、ViewBags のみを使用します。ただし、2を混ぜないでください。

したがって、特定の例では、ビューモデルにタイプのプロパティがあり、IENumerable<SelectListItem>ビュー内で Html.DropDownListFor ヘルパーの厳密に型指定されたバージョンを使用してモデルにバインドします。

@Html.DropDownListFor(x => x.ProductId, Model.Products)

明らかに、それらは私の 2 セントにすぎません。ViewModel と ViewBags を混在させても問題ないと言う人もいますが、私は彼らの意見を尊重します。

于 2012-12-08T16:20:51.193 に答える
22

可能な限り、ViewBag よりも ViewModels を優先ください。厳密に型指定されたビューを作成します。これにより、コードがよりクリーンになり、壊れにくくなり、エラーが発生しにくくなり、保守が容易になります。

ViewBagsは、動的に型指定されたオブジェクトの辞書にすぎないため、次のことが失われます。

  • コンパイル時間チェック
  • 自信を持ってリファクタリングする能力 (ツールのサポートが失われます)
  • IDE サポート - すべての使用箇所に移動する機能など
  • インテリセンス

おまけとして、 ViewBagを多用すると、 MVC パターンを使用するという点も見逃されます

ViewBags は asp.net のエッジ ケースの問題を解決するために作成されたという印象を受けます。人々は、プラットフォームの設計で当初意図されていたビュー モデルを作成する代わりに使用し、作業に損害を与えています。


ViewBagを多用しない理由は?

于 2016-05-18T10:30:06.080 に答える