两个相同复杂类型的嵌套模型属性

时间:2010-12-20 20:40:13

标签: asp.net-mvc

我有一个Customer模型,其中包含两个复杂属性“InternalAddress”和“PublicAddress”,它们都是相同的模型类型Address。

在视图中,我正在执行以下操作

<h2>Internal Address</h2>
<% RenderPartial("Address", Model.InternalAddress);%>
<h2>Public Address</h2>
<% RenderPartial("Address", Model.PublicAddress);%>

渲染时没有异常,但渲染的html确实对两个PartialView使用相同的输入名称......

有没有一种聪明的方法来处理这种情况?

1 个答案:

答案 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") %>