2011-07-28 66 views
1

我想爲不同的模型創建一個View,它們都是從同一個BaseModel繼承而來的。 但我不知道哪種方法是正確的。One View for不同型號,全部從BaseModel繼承

爲什麼我不想使用不同的/強類型的視圖?因爲可以說我會建立一個燈具店,而基本型號定義一盞燈。因此,所有繼承基礎模型的模型都是具有相同基本屬性和1,2,3特殊屬性的燈。我認爲爲幾乎相同的型號構建30-40視圖並不是必要的。

回答

0

正如你所說,除少數附加屬性外,所有的燈都是一樣的。設想這些屬性是基類的擴展。基類允許存在擴展(通過LampSpecialProperties),但不關心它們的內容。然後,你可以定義模型這樣

public class LampViewModel 
{ 
    public string SomeProperty {get;set} 
    public LampSpecialProperties SpecialProperties {get;set;} 
} 

public abstract class LampSpecialProperties 
{ } 

public class SomeConcreteLampSpecialProperties : LampSpecialProperties 
{ 
    public string BrightnessLevel {get;set;} 
} 

在您看來,顯示燈底座模特屬性,然後擴展屬性

@model LampViewModel 
... some shared properties  
@Html.DisplayFor(model => model.SpecialProperties) 

在查看/ DisplayTemplates你可以有模板,每一個具體實施的那些LampSpecialProperties

@model SomeConcreteLampSpecialProperties 
@Html.DisplayFor(model => model.BrightnessLevel) 

對於另一個燈

@model SomeAnotherConcreteLampSpecialProperties 
@Html.DisplayFor(model => model.FuelConsumption)// sounds scarry :) 

等等所有的燈擴展。

但這都是關於您的域和業務邏輯。如果您的企業無論如何需要30-40模型類,您應該逐一創建它們

0

你可以使用viewModels來處理這個。在MVC視圖中,模型是爲了(1)爲視圖提供強類型類並(2)從模型中去耦視圖的類。

在你的情況下,你可以有一個viewA呈現viewModelA並在你的控制器中從你需要渲染該視圖的任何模型中創建viewModelA。

這是關於這個問題的好文章:http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/

0

你能定義一個BaseLamp認爲,將顯示所有視圖的基本屬性,然後創建類似的東西呈現BaseLamp視圖,然後一個ExtendedLamp視圖其額外的領域?