假设我有一个 LineItem(来自过度使用的购物车示例),并且我想使用 EditorTemplate 来呈现它。
我完全可以使用父视图(部分或其他)中的 @Html.EditorFor(m => m.LineItems) 渲染它,但令人困惑的是传递一些额外数据的最佳方法(例如具有数据的 SelectList从数据库传入)到模板。
显然,我不应该通过添加这些无关的项目来污染 LineItem 模型(但从视图的角度来看,这是必需的。)
在诉诸 ViewBag/ViewData 技巧之前,我试图看看是否有一种强类型的方法可以做到这一点。
我尝试创建一个“LineItem”特定视图模型来传递数据,但它破坏了 MVC 生成的名称,并向集合中添加了一个额外的层(当我将视图模型的 IEnumerable 传递给 EditorFor( ) 调用,而不是实际 LineItem 的 IEnumerable)
另外,这是对 EditorTemplate 的错误使用吗?对于 EditorTemplate 来说,需要下拉菜单的 LineItem 是否包含来自数据库表的选项太多?
请引导我走向 MVC 必杀技。在等待答案的同时,我会尝试其他想法!
澄清一下:我考虑使用 EditorTemplate 的原因是因为它为我提供了自动集合处理功能。否则整个[id]业务就会变得太粘。
我最近遇到了同样的问题并发现this http://weblogs.asp.net/jgalloway/archive/2010/07/01/using-viewmodel-information-in-an-asp-net-mvc-2-editor-or-display-template.aspx解决方案。
总而言之,您应该创建包含原始集合和所需支持数据的自定义视图模型。然后在调用自定义模板的视图中就可以使用HtmlHelper
扩展方法重载以将支持数据传递给ViewData
字典。然后,您可以从您的自定义模板中检索并使用它们ViewData
.
我认为这是一个很好的解决方法,基本上这就是视图模型的目的,至少它比扩展或派生原始类只是为了为视图提供额外的数据要好得多。
请告诉我它是否适合您的场景或者您是否找到任何其他解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)