2010-12-20 100 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