我是相当新的MVC4,EF5和ASP.Net,我似乎不能找到一个好的答案在任何地方。
基本上,如果一切都通过viewmodel完成或者是否也包含viewbag?
假设我有一个方法填充下拉列表,我使用viewmodel来表示视图的输出。
我可以使用Viewbag.DropDown = PopulateDropdown();或者最好加入
这进入viewmodel,通过创建一个属性来保存List< SelectListItem>由PopulateDropdown()创建; ?
我知道ViewBag是多么方便,但我还没有看到任何坚实的理由,不使用它?如果任何人也能给我一些更多的洞察力,那将是太棒了。
解决方法
Basically,Should everything be done through the viewmodel or is it Ok
to also incorporate viewbag?
一切都应该在视图模型内完成。这是一个视图模型。您特别定义的类,以满足您的视图的要求。不要将ViewBags与viewmodel混用。视图不再清楚信息是从哪里来的。只使用视图模型(我推荐的方法)或只使用ViewBags。但不要混合2。
所以在你的具体例子中,你的视图模型上有一个属性,类型为IENumerable< SelectListItem>在你的视图中,你将使用强类型版本的Html.DropDownListFor帮助器来绑定到模型:
@Html.DropDownListFor(x => x.ProductId,Model.Products)
显然这些只是我的2美分。其他人会说,混合viewmodels和ViewBags是罚款,我尊重他们的意见。