在ASP.NET MVC中使用类型为另一个ViewModel的属性的ViewModel是不好的做法

时间:2011-04-15 13:36:40

标签: c# asp.net asp.net-mvc asp.net-mvc-3

拥有一个具有另一个视图模型属性的视图模型会不会被视为不良做法?...如:

public class PersonViewModel
{
     public PersonJobViewModel Peron { get; set;}
     //other properties here...
}

修改

关于我的特殊情况:

我有一个目前包含2个域类的视图模型。我将此viewmodel传递给一个加载2个局部视图的视图(视图模型中每个域类一个)

因此,我最终将纯域模型直接传递到部分视图中。

我的想法是,我可以为每个域模型创建一个视图模型,然后将这些2包装在另一个传递给我父母的视图模型中......

还是有更好的方法来实现这个目标吗?

4 个答案:

答案 0 :(得分:12)

不,这一点都不差。这是完美的代码。它允许您在不同视图之间重用部分视图模型。

答案 1 :(得分:6)

我不相信我认为将一个ViewModel聚合在另一个ViewModel中是不好的做法。我可以看到一个优势,比如能够渲染部分视图或使用聚合视图模型的EditorFor

答案 2 :(得分:2)

绝对没问题。在概念上,视图模型应该模拟您的域模型以及给定视图的相关信息。

请记住,一旦“最佳做法”变得违反直觉并适得其反,在某一特定情况下,它们可能不再是您的最佳做法。最佳实践是指导原则,不严格遵守要求。

编辑:更改了我的初始评论,因为我不确定自己是否已经说清楚了之前就可以了。

Edit2:还要问问自己是否需要查看模型。如果他们真的模仿你的领域模型,重点是什么?只需使用您的域模型(除非您有其他依赖项会使这个丑陋)。

答案 3 :(得分:-2)

不,您可能有合作伙伴模型与某些字段,如:

public class Parner
{
  int age {get; set;}
  //etc
} 

public class ParnerList
{
  public List<Partner> ListOfPartner {get; set;}
  public int PageNumber {get; set;}
  public int PageCount {get; set;}
  //etc
}

在View for show list和paging

中使用很容易