ASP.NET MVC 3 - ViewModel最佳实践

5

我有一个Razor视图,里面有很多图表和其他文本字段,它们从控制器获取数据。我想从控制器传递一个ViewModel到视图中,然后解析相关内容并显示出来。

在MVC中,是否有更好的做法来解决这个问题?请大家提出建议。

ViewModel类可能如下所示:

public class ViewModelDemo
{
    public MyChart chart {get;set;}
    public string LeftContent {get;set}
    public string bottomContent {get;set;}
    public ChartLeged legent {get;set} 
    ......
}

public class MyChart
{
   public List<int> xAxis {get;set}
   public List<int> yAxis {get;set;}
   ......
}

我试图返回ViewModel的原因是页面的许多部分具有不同的数据。


你的意思是嵌套ViewModel好吗?我也很感兴趣,并且也这样做(我的意思是嵌套)。我有一个页面,其中包含几个逻辑部分,而且只有一个嵌套的ViewModel可以被请求(取决于ajax或postback请求)。所以我希望你是对的) - Denis Agarev
1
既然我们在谈论良好的做法:使用与框架/语言相同的命名约定被认为是良好的做法。在这种情况下,.NET/C#使用Proper Casing来表示公共属性。因此,您应该将属性名称更改为 ChartBottomContentLegend(正确拼写)、XAxisYAxis - Omar
2个回答

3
当然可以。ViewModel是解决这个问题的完全可接受的方案。请参见Palermo在他的MVC in Action书籍第12.1.5节(免费样品中非常方便)中的描述。
另一个选择是为我们的视图创建一个单独的view model类型,不同于domain model。我们将创建一个专门的类,仅适用于那个视图。我们可以根据需要塑造该类型,并允许视图根据我们的意愿塑造我们的view model。分离出view model的优点是我们的视图不会以任何方式影响domain model。对于较简单的应用程序,这种分离是不必要的,会过于复杂化设计。随着视图的复杂性增加,除非将view model和domain model分开,否则视图的设计对我们的domain model越来越有影响。
请查看http://www.manning.com/palermo/Samplechapter12.pdf获取更多信息。

2

我认为您的解决方案是正确的。

另一种方法是将大型剃刀视图分成较小的部分视图,每个视图都有更简单的视图模型。这对于可读性、责任分离等方面非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接