我是相当新的MVC4,EF5和ASP.Net,我似乎并没有能够在任何地方找到一个很好的答案。
基本上,如果一切都通过视图模型来完成还是确定也纳入viewbag?
说我有填充一个下拉列表的方法,而我使用的视图模型来表示该视图的输出。
我是否确定使用Viewbag.DropDown = PopulateDropdown();
或者会是更好的将这一进入视图模型,通过创建一个属性以保持List<SelectListItem>
通过创建PopulateDropdown();
?
我知道怎么ViewBag是得心应手,但我还没有看到任何坚实的理由,以不使用它呢? 如果有人还可以提供我一些更深入的了解,这将是非常美妙的。
基本上,如果一切都通过视图模型来完成还是确定也纳入viewbag?
一切都应该视图模型内进行。 这是一个视图模型是什么。 一个类,您明确定义,以满足您观的要求。 不要用的ViewModels混合ViewBags。 它不再明确为其中的信息来自的视图。 要么只使用一个视图模型(的做法,我建议)或仅使用ViewBags。 但是,不要混合2。
因此,在你特定的例子,你会对你的视图模型属性是类型IENumerable<SelectListItem>
和您的视图中,您将使用Html.DropDownListFor助手的强类型版本绑定到模型:
@Html.DropDownListFor(x => x.ProductId, Model.Products)
显然,那些只是我的2美分。 其他人会说,混合的ViewModels和ViewBags是好的,我尊重他们的意见。
身高超过ViewBag 的ViewModels的地方就可以了。 创建强类型的视图。 它使你的代码更清洁,不那么脆弱,容易出错少,且易于维护。
ViewBags都让您失去动态类型的对象只是字典:
- 编译时间检查
- 有信心重构的能力(你失去的工具支持)
- IDE的支持 - 比如导航到所有用途的能力
- 智能感知
奖励积分广泛利用ViewBag还惦记使用的点MVC模式
我得到的印象ViewBags的建立是为了解决在asp.net边缘问题的情况下,人们使用它们,而不是创建视图模型作为原本打算在该平台的设计,他们的工作造成损害。
与感谢为什么不大量使用ViewBag?