Razor で C# MVC を使用しています。
リスト、ドロップダウン、および 2 つのテキスト ボックスを表示するビューがあるとします。この情報はすべて 1 つのクラスに保持し、それをビューに渡す必要がありますか?
Razor で C# MVC を使用しています。
リスト、ドロップダウン、および 2 つのテキスト ボックスを表示するビューがあるとします。この情報はすべて 1 つのクラスに保持し、それをビューに渡す必要がありますか?
コントローラーからビューにデータを渡すために ViewModel を使用することの重要性はいくら強調してもしすぎることはありません。あなたの質問で述べたように、あなたはすでにこれを行っています。これは素晴らしいスタートです!
だから..これが私がそれをする方法です。
public class IndexViewModel // or DetailsViewModel or whatever the Action Method is
{
public IEnumerable<Foo> Foos { get; set; }
public SelectList DropDownBox { get; set; }
public string Name { get; set; } // Textbox 1
public string Description { get; set; } // Textbox 2
}
わかった。だから私がやったことを見てみましょう。
が必要とするすべての情報を渡しましたView
。それ以上でもそれ以下でもありません。正確な情報だけです。
これらは、ループしてレンダリングできるFoos
リストです。foo
(PRO ヒント: DisplayTemplates を使用して、カスタム タイプ/カスタム タイプのコレクションをレンダリングします)。
また、ドロップダウンのコンテンツなどを渡すことも提案しましたSelectList
。これが気に入らない人もいます (これは問題ありません)。代わりに、アイテムのコレクションを渡してドロップダウン リストに表示しますが、個人的には漏れが多すぎると感じています。私たちが持っている主な理由は、これらのことをテストViewModels
できるようにするためです。
最後に、テキスト ボックスごとに 1 つのプロパティがあります。
要約すると、すべての情報を 1 つの にまとめましたViewModel
。このビュー モデルには、他のクラス (プロパティを介して公開) を含めることができます。しかし、はい -ビューごとに 1 つの ViewModel が必要です。
私が行ったプロジェクトから、すべての情報を1つのクラスに保持することをお勧めしますが、Idan Aryeが述べているように、すべての情報はデータに依存します。あなたが求めていることから、C#の優れたリソースであるmsdnを見てみることをお勧めします。うまくいけば、それが役に立った
たぶん、あなたが本当に求めているのは、ビューモデルを使うべきですか?
似ている... 2 つのオブジェクトだけにビュー モデルを使用する必要がありますか?
IMHO ビュー モデルは、MVC と Razor を使用する場合に適していることがよくあります。
最終的にはあなた次第であり、決定は他の要因の中でも特にモデルに依存します。たとえば、ビューに必要なビットが最終的にモデル内のさまざまなエンティティから供給される場合、答えはイエスであると主張する人がいるかもしれません。単一のビュー モデルをビューに合わせて調整できるため、ビュー モデルの使用を検討する必要があります。
基本的に、ビュー モデルはビューをきれいに保つのに役立ちます。通常考慮すべき主な意味は、ドメイン エンティティをビュー モデルにマッピングしたり、その逆 (GET や POST 中など) に必要な必然的なマッピング ロジックです。AutoMapperは、マッピング コードを削減するために使用できるライブラリの例です。私の経験では、マッピング ロジックがそれほど複雑でない限り、うまく機能します。
私の意見では、ページの目的によって異なります。ドメイン オブジェクトのプロパティを表示する場合は、ビュー用の特別なオブジェクト (View Model など) を検討する必要があります。クラスはドメインのオブジェクト クラス (User など) になります。 ) およびある時点で、View Model の (たとえば、UserViewModel)。
もちろん、複合オブジェクトを運ぶために値オブジェクト/DTOを利用することもできます。したがって、ドメイン固有ではないが、DALからビューまでシステム全体でデータを転送するために必要な対応クラスを作成する必要があります.
最後に、ビューにデータを表示するために、ドメイン オブジェクトまたはカスタム DTO / 値オブジェクトに対応するビュー モデル クラスが常に必要になります。
これが少し役立つことを願っています。
モデルの大きさにもよりますが、1 つのクラスにまとめることもできます。
たとえば、以下に示すように従業員が 3 のように単純な場合は、1 クラスに保持します。ただし、これより 3 ~ 4 倍大きく、より複雑なデータ フィールドがある場合は、それらを別のクラスに保持するようにしてください。
public class EmployeeController : Controller
{
public ActionResult Index()
{
var employeeModel = new Employee
{
FirstName = "Hat",
LastName = "Soft",
Departments = new BindingList<SelectListItem>
{
new SelectListItem {Text = "Accounts", Value = "1"},
new SelectListItem {Text = "Human Resource", Value = "2"},
new SelectListItem {Text = "Operations", Value = "3"}
}
};
return View(employeeModel);
}
}