我想爲不同的模型創建一個View,它們都是從同一個BaseModel繼承而來的。 但我不知道哪種方法是正確的。One View for不同型號,全部從BaseModel繼承
爲什麼我不想使用不同的/強類型的視圖?因爲可以說我會建立一個燈具店,而基本型號定義一盞燈。因此,所有繼承基礎模型的模型都是具有相同基本屬性和1,2,3特殊屬性的燈。我認爲爲幾乎相同的型號構建30-40視圖並不是必要的。
我想爲不同的模型創建一個View,它們都是從同一個BaseModel繼承而來的。 但我不知道哪種方法是正確的。One View for不同型號,全部從BaseModel繼承
爲什麼我不想使用不同的/強類型的視圖?因爲可以說我會建立一個燈具店,而基本型號定義一盞燈。因此,所有繼承基礎模型的模型都是具有相同基本屬性和1,2,3特殊屬性的燈。我認爲爲幾乎相同的型號構建30-40視圖並不是必要的。
正如你所說,除少數附加屬性外,所有的燈都是一樣的。設想這些屬性是基類的擴展。基類允許存在擴展(通過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模型類,您應該逐一創建它們
爲什麼不爲你的基礎模型創建一個強類型的視圖?
您可以通過在return View("myViewName", myModel);
中指定其名稱來調用此視圖。
另一種選擇是使用T4模板生成該模型中的表單字段:http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html
然後只需要調用@Html.EditorModelFor()
生成您的模型HTML。
你可以使用viewModels來處理這個。在MVC視圖中,模型是爲了(1)爲視圖提供強類型類並(2)從模型中去耦視圖的類。
在你的情況下,你可以有一個viewA呈現viewModelA並在你的控制器中從你需要渲染該視圖的任何模型中創建viewModelA。
這是關於這個問題的好文章:http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/
你能定義一個BaseLamp認爲,將顯示所有視圖的基本屬性,然後創建類似的東西呈現BaseLamp視圖,然後一個ExtendedLamp視圖其額外的領域?