8

ASP.NET MVC 2 Preview 1 中的一项新功能是支持编辑器模板和显示模板的概念,它允许您使用简单的 HTML 帮助程序调用预定义如何呈现给定对象以进行显示或编辑:

<%=Html.EditorFor(customer => customer) %>
<%=Html.DisplayFor(customer => customer) %>

这很酷,但我并没有真正看到这与用于相同目的的局部视图之间的区别。此外,在示例中,我看到编辑器模板不包含实际的表单标签,并且如果我需要为给定的编辑器提供一些客户端功能(比如通过 jQuery),我无法安全地将该代码放入模板,因为我在客户端中添加逻辑的表单上没有静态句柄。在我正在处理的应用程序中,我混合了编辑器模板和部分视图,我渲染它们以编辑内容。根据我创建编辑器的表单的复杂性,我选择了一种方法而不是另一种方法,但这当然会给应用程序增加不希望的不一致程度。

为什么在局部视图上使用模板,反之亦然?此外,当使用编辑器模板时,将客户端逻辑添加到编辑器而不将其复制到使用该编辑器的每个视图中的理想方法是什么?

4

2 回答 2

3

ScottGu 在他关于 MVC V2的博文中解释了其中的一些内容。

根据我收集的信息,这将为您传递给助手的对象的每个属性创建输入。因此,如果您有对象:

public class Customer
{
    public string Name { get; set; }
    [UIHint("MyCoolCalendar")]
    public DateTime CoolDate { get; set; }
}

然后创建一个编辑器:

<%= Html.EditorFor(customer => customer) %>

它将为客户的姓名生成一个文本输入,并为 CoolDate 生成一个 MyCoolCalendar(这是一个自定义控件),而无需编写自定义控件来包装整个对象。它自动从属性的类型/uihint 中推断出控件的类型。至少这是我在没有时间测试的情况下理解的。

于 2009-08-20T19:53:05.577 回答
0

这是我发现运行良好的一个示例。

假设您有一个拥有地址的客户。您不能为新客户创建地址,但通过关联,您可以拥有一个具有字段地址的客户对象。

然后,在您为客户调用的“创建”方法中Html.EditorFor(c => c.Address);(您可以在此处为您的需要创建自定义模板)将生成完全填充的地址对象,您可以在客户之前保存该对象,从而解决依赖关系。

现在,当您有参考数据(例如国家/地区列表或州)或其他任何内容时,最好只使用部分视图来呈现它,而不用打扰关联。

希望这可以帮助,

-vlad

于 2010-02-08T03:24:43.420 回答