2010-12-20 99 views
1

我有一个客户模型,具有两个复杂属性“InternalAddress”和“PublicAddress”,它们都是相同的模型类型地址。同一复杂类型的两个嵌套模型属性

在视图中我做了以下

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

它获取呈现无异常,但呈现的HTML确实使用相同的输入名字都PartialViews ...

有一个聪明的办法处理这种情况?

+0

你能澄清吗?你能显示呈现的HTML吗? – hunter 2010-12-20 20:43:41

+0

他们没有不同的ID或名称吗?或具有不同属性的容器? – 2010-12-20 20:53:55

回答

3

使用部分视图组合功能很好,因为大多数情况下地址只能以单向方式呈现。

正确显示表单的一种方法是使用MVC2 EditorFor和DisplayFor模板。将表单的局部视图移动到/Views/Shared/EditorTemplates/Address.ascx(以及只有显示的部分放入/Views/Shared/DisplayTemplates/Address.ascx中)。

一旦完成,您可以使用以下两种方法之一。

选项1:

您可以编辑您的视图模型是这样的:

[UIHint("Address")] 
public Address InternalAddress { get; set; } 

[UIHint("Address")] 
public Address PublicAddress{ get; set; } 

的UIHint告诉模板引擎使用的共享/ EditorTemplates文件夹名为 “地址” 的看法。

然后你就可以在你的视图中使用EditorFor模板没有修改:

<%: Html.EditorFor(model => model.InternalAddress) %> 

选项2:

只需在EditorFor视图指定模板的名称:

<%: Html.EditorFor(model => model.InternalAddress, "Address") %> 
+0

完美!这样做,它很容易... :) – Max 2010-12-20 22:43:16