2010-05-14 52 views
0

可以讓部分視圖繼承多個模型嗎?我有三個模型(聯繫人,客戶,供應商),都有地址信息(地址)。爲了實現DRY,我將地址信息拖入自己的模型地址中。我創建了地址的部分創建/更新視圖,以及在其他三個模型的其他創建/更新視圖中呈現的內容。ASP.NET MVC通用部分

回答

2

而不是使用複合視圖模型,您仍然可以幹,並有三個視圖(聯繫人,客戶端,供應商)。如果您擔心在顯示地址信息時重複自己,請爲該類型製作顯示模板。這樣,你可以寫出所有爲每個聯繫人,客戶和供應商的具體信息,在他們自己的看法,只是在下降:

<%= Html.DisplayFor(m => m.Address) %> 

您現在正幹,同時還支持單一職責原則。

有關顯示和編輯模板的更多信息,您可以查看Brad WilsonPhil Haack的帖子。

+0

是不是'Html.DisplayFor()'ASP.NET MVC 2功能? – Nate 2010-05-14 15:56:50

+0

@Nate Bross是的。 – 2010-05-14 16:00:28

+0

很好的答案和鏈接。一定會讀它! – gnome 2010-05-14 16:40:54

0

您如何創建一個包含所有三種模型(聯繫人,客戶端,供應商)的新模型。然後將這個新模型傳遞給你的部分。從那裏你可以訪問新創建的模型中的所有三個模型。

+0

我不認爲他需要在同一時間渲染它們。他創建了一個用於呈現地址的視圖,現在想要打電話從Contacts/Clients/Vendors視圖內部進行呈現。 – R0MANARMY 2010-05-14 15:37:08

+0

我最初將所有三種模型合爲一體,但他們的信息足夠獨特,因此將它們分開是有意義的。我同意這樣做會更容易。 – gnome 2010-05-14 15:39:31

0

我認爲要做到這一點的唯一方法是使用複合視圖模式(這不一定是壞事),所以像:

public class MyControllerActionViewModel 
{ 
    public IList<Contact> Contacts { get; set; } 
    public IList<Client> Clients { get; set; } 
    public IList<Vendor> Vendors { get; set; } 
} 

我們使用這種方法很多,以獲得更多的元素進入在需要時查看視圖,並且我發現在需要時使用這些自定義視圖模型沒有不好的做法。

希望有幫助!

+0

這裏有迴音嗎? – Gabe 2010-05-14 15:34:42

+0

只有阿爾法男性不幸;) – 2010-05-14 15:42:19

+0

無所謂,因爲你們誰都沒有給出正確的答案 – R0MANARMY 2010-05-14 15:50:09