ASP.NET MVC 2 Preview 1中的一个新功能是支持编辑器模板和显示模板的概念,它允许您预先定义如何使用简单的HTML帮助程序呈现给定对象以进行显示或编辑拨打:
<%=Html.EditorFor(customer => customer) %>
<%=Html.DisplayFor(customer => customer) %>
这很酷,但我并没有真正看到它与部分视图之间的区别,它们具有相同的用途。此外,在示例中,我看到编辑器模板不包含实际的表单标签,并且如果我需要为给定的编辑器提供一些客户端功能(比如通过jQuery),我无法安全地将代码放入模板,因为我在窗体上没有静态句柄我在客户端添加逻辑。在我正在处理的应用程序中,我有一个编辑器模板和部分视图的混合物,我将其渲染以编辑内容。根据表单的复杂性,我创建了一个编辑器,因为我选择了一种方法而不是另一种方法,但这当然会给应用程序带来不希望的不一致程度。
为什么在部分视图上使用模板或反之亦然?此外,在使用编辑模板时,将编辑器添加客户端逻辑而不将其复制到使用该编辑器的每个视图中的理想方法是什么?
答案 0 :(得分:3)
ScottGu在他的blogpost about MVC V2中解释了其中一些内容。
从我收集的内容中,这将为您传递给帮助程序的对象的每个属性创建输入。所以如果你有对象:
public class Customer
{
public string Name { get; set; }
[UIHint("MyCoolCalendar")]
public DateTime CoolDate { get; set; }
}
然后创建一个编辑器:
<%= Html.EditorFor(customer => customer) %>
它将为客户名称生成文本输入,并为CoolDate生成MyCoolCalendar(这是一个自定义控件),而无需编写自定义控件来包装整个对象。它会自动从属性的类型/ uihint中推断出控件的类型。至少这是我所理解的,没有时间测试它。
答案 1 :(得分:0)
这是我发现运作良好的一个例子。
假设您有一个拥有地址的客户。您无法为新客户创建地址,但通过关联,您可以拥有一个具有字段地址的客户Customer。
然后,在客户的“创建”方法中,您调用Html.EditorFor(c => c.Address);
(并且您可以根据需要创建自定义模板),这将生成完全填充的Address对象,您可以在Customer之前保存,从而解决依赖性。
现在,当你有参考数据,例如国家列表或国家,或者其他什么时,最好只使用部分视图来渲染它,而不是打扰协会。
希望这有帮助,
-vlad