2010-05-14 80 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