以正确的方式开发ASP.NET MVC Web应用程序

时间:2011-11-16 07:16:36

标签: asp.net-mvc asp.net-mvc-3 model-view-controller view model

我开始开发一个新的ASP.NET MVC应用程序,我想确保我对在MVC模式下开发应用程序的方式的理解是正确的。

问题1:假设我有一些主视图(MainView1MainView2,...),其中包含一些部分视图(PartialView1PartialView2PartialView3,...)。根据我对MVC的理解,我应该为每个视图定义一个模型。例如我必须定义PartialModelPartialModel2,...并定义我的主要模型,这些模型是已在其中使用的部分模型的容器:

public class MainModel1
{
    public PartialModel1 Partial1 {get;set}        
    public PartialModel2 Partial2 {get;set}
    public PartialModel3 Partial3 {get;set}
}

这样,当我想重定向到MainView时,我可以使用此模型初始化该视图中使用的模型。我对MVC的理解是否正确?或者视图和模型之间的通信是否应该在MVC中以另一种形式进行?

问题2 :如果上述内容正确无误,那么假设我的某些主视图页面中有部分视图。这个局部视图有一个调用动作方法的提交按钮。此操作方法应以某种方式返回主页面的视图以及视图的右视图模型。是否有关于如何在局部视图的动作中获取/设置其他视图的视图模型的建议?

感谢。

2 个答案:

答案 0 :(得分:2)

你的理解是正确的。每个视图(无论是主视图还是部分视图)都应该具有相应的视图模型(除非在非常罕见的情况下,此视图当然只包含静态html)。遵循此逻辑,必须呈现其他部分视图的主视图将具有视图模型,该视图模型本身将具有参考(可能作为属性)以查看这些部分视图所需的模型。

还有另一种使用Html.Action助手的技术。在这种情况下,部分通过另一个控制器/动作而不是主控制器/动作来呈现。因此,您无需在主视图模型中引用局部视图模型。它们将完全不同。请查看following blog post以了解有关Html.Action的更多信息。

答案 1 :(得分:1)

你的理解非常好。这也是您可以在Asp.net MVC中引用ViewModel的内容。

那么,什么基本上是Asp.net MVC ViewModel?

在ASP.NET MVC中,ViewModels允许您将一个或多个数据模型或源中的多个实体整形为一个对象,并针对视图的消费和呈现进行了优化。下图说明了ViewModel的概念:

enter image description here

ViewModel的目的是让视图具有一个要呈现的对象,从而减少了视图中对其他必要的UI逻辑代码的需求。这意味着视图的唯一责任或关注是呈现单个ViewModel对象,有助于更清晰地分离关注点(SoC)。关注点是具有特定目的(即关注点)的应用程序的不同方面,并且将这些方面分开意味着您的应用程序更有条理,代码更集中。将数据操作代码放在远离视图和控制器的位置,强制执行SoC。

在MVC中使用ViewModels以获得更精细的粒度和更好的SoC,从而使代码更易于维护和测试。请记住,单元测试是关于测试小型单元。

除了更好的编码实践外,还有许多商业原因可以证明您可以考虑使用ViewModel的原因:

  • 将查找数据的下拉列表合并到相关实体
  • 主 - 明细记录视图
  • 分页:结合实际数据和分页信息
  • 购物车或用户个人资料小部件等组件
  • 仪表板,包含多个不同数据来源
  • 报告,通常包含汇总数据