我有一个Customer模型,其中包含两个复杂属性“InternalAddress”和“PublicAddress”,它们都是相同的模型类型Address。
在视图中,我正在执行以下操作
<h2>Internal Address</h2>
<% RenderPartial("Address", Model.InternalAddress);%>
<h2>Public Address</h2>
<% RenderPartial("Address", Model.PublicAddress);%>
渲染时没有异常,但渲染的html确实对两个PartialView使用相同的输入名称......
有没有一种聪明的方法来处理这种情况?
答案 0 :(得分:3)
使用部分视图组合功能很好,因为大多数情况下地址只能以一种方式呈现。
正确显示表单的一种方法是使用MVC2 EditorFor和DisplayFor模板。将表单的局部视图移动到/Views/Shared/EditorTemplates/Address.ascx(如果您有一个显示部分,则移动到/Views/Shared/DisplayTemplates/Address.ascx中)。
完成后,您可以使用以下两种方式之一。
选项1:
您可以像这样编辑ViewModel:
[UIHint("Address")]
public Address InternalAddress { get; set; }
[UIHint("Address")]
public Address PublicAddress{ get; set; }
UIHint告诉模板引擎在Shared / EditorTemplates文件夹中使用名为“Address”的视图。
然后您可以在视图中使用EditorFor模板而无需修改:
<%: Html.EditorFor(model => model.InternalAddress) %>
选项2:
只需在视图中的EditorFor中指定模板的名称:
<%: Html.EditorFor(model => model.InternalAddress, "Address") %>