個人的にはViewModels
、View を持ってから、そのモデルに強く入力する習慣を身につけます。
はmodel
、表示したいデータのみを公開します。それ以上でもそれ以下でもありません。名前、価格、その他のメタデータを表示したいとします。
疑似コード ...
//View Model
public class MenuItem
{
public string Name { get; set; }
public decimal Price { get; set; }
public bool IsVegetarian { get; set; ]
}
public class IndexViewModel
{
public IList<MenuItem> MenuItems { get; set; }
public string MaybeSomeMessage { get; set; }
}
//in Controller
public ActionResult Index()
{
// This gets the menu items from your db, or cache or whatever.
var menuItemsFromDb = GetMenuItems();
// Lets start populating the view model.
IndexViewModel model = new IndexViewModel();
// Project the results to your model.
IList<MenuItems> menuItems = null;
if (menuItemsFromDb != null)
{
model.MenuItems = (from menuItem in menuItemsFromDb
select new MenuItem() {
Name = menuItem.Name,
Price = menuItem.Price,
IsVegetarian = menuItem.IsVegetarian
}).ToList();
}
// Anything else...
model.MaybeSomeMessage = "Hi There!";
return View(model);
}
//in View
@model IndexViewModel
<h3>@Model.MaybeSomeMessage</h3>
<ul>
@foreach(var item in Model.MenuItems)
{
<li><a href="#">@item.Name</a> - $ @item.Price</li>
}
</ul>
等..
エラーチェックなどをスキップしたことに注意してください。
ポイント -> 必要なものだけを渡します。
最初は、次のように言うかもしれません: WTF! それは他の答えよりもずっと長いです!もっとコードを書きたい。
その考えに対して私が提案できる最良の答えは、長い目で見れば、ビューは必要な正確なデータだけを知る必要があるため、この習慣を身につけたことに感謝することです。それ以上でもそれ以下でもありません。最小限のデータを送信すると、非常に軽量でシンプルなビューが得られ、サポート/デバッグが大幅に改善されます。次に、より多くの知性とスマートさを備えたコントローラーを単体テストできるようになります。
GL!