Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ASP.NET MVC 2-何时使用模板与何时使用局部视图_Javascript_Asp.net Mvc_Dry_Partial Views - Fatal编程技术网

Javascript ASP.NET MVC 2-何时使用模板与何时使用局部视图

Javascript ASP.NET MVC 2-何时使用模板与何时使用局部视图,javascript,asp.net-mvc,dry,partial-views,Javascript,Asp.net Mvc,Dry,Partial Views,ASP.NET MVC 2 Preview 1中的一个新功能是支持编辑器模板和显示模板的概念,允许您通过简单的HTML帮助程序调用预先定义如何呈现给定对象以进行显示或编辑: <%=Html.EditorFor(customer => customer) %> <%=Html.DisplayFor(customer => customer) %> 客户)%> 顾客)%> 这很酷,但我真的看不出这与服务于相同目的的局部视图之间的区别。此外,在示例中,我看到编辑

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

<%=Html.EditorFor(customer => customer) %>
<%=Html.DisplayFor(customer => customer) %>
客户)%>
顾客)%>
这很酷,但我真的看不出这与服务于相同目的的局部视图之间的区别。此外,在示例中,我看到编辑器模板不包含实际的表单标记,如果我需要为给定的编辑器提供一些客户端功能(比如通过jQuery),我无法安全地将代码放在模板中,因为我在客户端添加逻辑的表单上没有静态句柄。在我正在使用的应用程序中,我混合使用了编辑器模板和局部视图,可以对其进行渲染以编辑内容。根据表单的复杂性,我正在创建一个编辑器,因为我选择了一种方法而不是另一种方法,但这当然会给应用程序增加不希望的不一致性


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

ScottGu在他的文章中解释了其中一些

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

public class Customer
{
    public string Name { get; set; }
    [UIHint("MyCoolCalendar")]
    public DateTime CoolDate { get; set; }
}
然后创建一个编辑器:

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

它将为客户名称生成文本输入,为CoolDate生成MyColCalendar(这是一个自定义控件),而无需编写自定义控件来包装整个对象。它会根据属性的type/ui提示自动推断控件的类型。至少我在没有时间测试的情况下就理解了这一点。

这里有一个我发现效果很好的例子

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

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

现在,当您有参考数据时,例如国家/地区列表或州,或者其他什么,最好只使用部分视图来呈现它,而不必考虑关联

希望这有帮助


-vlad

我读过顾先生的帖子,其中解释了EditorFor既可以用于单个字段,也可以用于整个对象。我指的是上面场景中的后一种情况。哦,好的。他在文章中也说明了这一点:“默认情况下,它将循环对象的公共属性,并为找到的每个属性生成、元素和任何适当的验证消息。”。因此,它会自动为对象的所有属性生成输入。在对象上,可以在属性上设置UIHitts,以便对特定属性使用自定义控件。我会更新一下我的答案。也就是说,我在调用EditorFor(SomeObject)时不需要显式定义模板,只要我不需要处理自定义字段之类的特殊操作?是的,据我所知,它将递归(?)解析属性并根据属性的类型添加适当的编辑器。这仍然不能回答“如何向编辑器添加客户端逻辑而不将其复制到使用该编辑器的每个视图中”。。。