如果视图可能有不同的实体,如何组织模型?

时间:2014-07-19 07:57:08

标签: asp.net-mvc design-patterns

我正在撰写有关房地产销售的ASP.NET MVC4网站。

我有一些实体,比如Flat,House和Land。它们基于基类Object(带有基本字段,例如:Price,Square等)。

在我的网站上会有一个用于显示销售对象的视图。但它可以是Flat,House或Land。我知道,我无法将几个模型绑定到视图。但是,如果我将对象模型绑定到我的视图,它将不会有这样的字段,例如“FlatsCount”用于平面,或“HasGarage”用于房屋。

那么,我该怎么办?

1 个答案:

答案 0 :(得分:0)

实际上,如果您在设计时不知道哪个派生类型(Flat,House,Land等)将传递给视图,那么您将无法做到安全地使用该派生类型的附加属性而不进行类型检查。这会将行为放入视图中,这是一个坏主意。

相反,我会考虑创建几个强类型的部分视图 - _FlatPartial,_HousePartial等。每个人都可以使用HTML来呈现所需的类型。然后,您的主视图可以检查传入的对象的类型并相应地呈现正确的部分。类似的东西:

if (Model is Flat)
    @RenderPartial("_FlatPartial");

或类似。

另一种方法是为每个派生类型创建自定义显示模板,然后只需调用@DisplayFor(Model)并让MVC为该类型呈现正确的显示。不确定它是否会起作用,因为模型可能认为所有对象都是基础的,而不是派生的类型。在这种情况下,if...else方法会更合适。