2009-08-20 38 views
8

其中一个新功能ASP.NET MVC 2预览版是编辑模板的概念,并显示模板,让你可以支持预先定义给定对象将如何呈现的显示或编辑用一个简单的HTML助手呼吁:ASP.NET MVC 2 - 当使用模板VS何时使用局部视图

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

这是很酷,但我实在不明白这和部分观点有异曲同工之妙的区别。此外,在示例中,我看到“编辑器模板”不包含实际的表单标记,并且如果需要为给定编辑器提供某些客户端功能(例如通过jQuery),我无法安全地将该代码放入模板,因为我不会在客户端添加逻辑的表单上有一个静态句柄。在我正在处理的应用程序中,我使用编辑模板和部分视图的混合编辑内容。根据表单的复杂性,我创建了一个编辑器,因为我选择了另一种方法,但是这当然会给应用程序增加不希望的不一致程度。

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

回答

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) %> 

这将产生对客户的名称的文本输入,以及一个MyCoolCalendar(这是一个customdefined控制)对于CoolDate而无需编写自定义控件来包装整个对象。它会自动从属性的类型/ uihint推导出控件的类型。至少这是我没有时间去测试它的理解。

+0

我看了谷先生的职位,并解释说,EditorFor既可用于个人领域和全对象使用。我指的是上述情况中的后一种情况。 – 2009-08-20 20:38:18

+0

噢好吧。他在帖子中说明了这一点的目的:“默认情况下,它会遍历对象的公共属性并生成一个元素,并为它找到的每个属性生成任何适当的验证消息。”所以它会自动为对象的所有属性生成输入。在对象上,您可以在属性上设置UIHints以使用特定属性的自定义控件。我会稍微更新我的答案。 – Runeborg 2009-08-20 22:14:27

+0

所以说,当我调用EditorFor(SomeObject)时,我不需要显式定义模板,只要不需要像处理自定义字段那样执行任何特殊操作即可。 – 2009-08-20 23:57:03

0

下面是我发现工作得很好的一个例子。

比方说,你有一个有一个地址一个客户。您无法为新客户创建地址,但通过关联,您可以让对象客户拥有一个字段地址。

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

现在,当你有参考的数据,如国家列表或美国,或什么的,它也许最好只使用局部视图来渲染它,而不是与协会打扰。

希望这有助于

-vlad