我是MVC4,EF5和ASP.Net的新手,我似乎无法在任何地方找到一个好的答案。
基本上,一切都应该通过viewmodel完成,还是可以合并viewbag?
假设我有一个填充下拉列表的方法,我使用viewmodel来表示视图的输出。
我可以使用Viewbag.DropDown = PopulateDropdown();
或者更好地合并
这个进入ViewModel,通过创建一个属性来保存List<SelectListItem>
创建的PopulateDropdown();
?
我知道ViewBag有多方便,但是我还没有看到任何坚实的理由不使用它?如果有人也能为我提供更多的见解,那就太棒了。
答案 0 :(得分:48)
基本上,一切都应该通过viewmodel完成,还是好的 还包含viewbag?
一切都应该在视图模型中完成。这就是视图模型。您专门定义的类,以满足视图的要求。不要将ViewBags与ViewModels混合使用。对于查看来自何处的信息不再清楚。要么只使用视图模型(我推荐的方法),要么只使用ViewBags。但是不要混淆2。
因此,在您的特定示例中,您将在视图模型上具有类型为IENumerable<SelectListItem>
的属性,并且在视图中,您将使用强类型版本的Html.DropDownListFor帮助程序绑定到模型:< / p>
@Html.DropDownListFor(x => x.ProductId, Model.Products)
显然那些只是我的2美分。其他人会说混合ViewModels和ViewBags很好,我尊重他们的意见。
答案 1 :(得分:14)
在 ViewBag 上首选 ViewModels ,无论您身在何处。创建强类型视图。它使您的代码更清晰,更不易碎,更不易出错,并且易于维护。
ViewBags 只是动态类型对象的字典,因此您输了:
对于大量使用 ViewBag 的奖励积分,也忽略了使用MVC pattern
的重点我得到的印象ViewBags是为解决asp.net中的边缘案例问题而创建的,人们使用它们而不是创建最初用于平台设计的视图模型,从而损害了他们的工作。