ASP.NET MVC视图模型的最佳实践

时间:2010-09-06 20:15:30

标签: asp.net asp.net-mvc viewmodel

我问自己如何正确创建视图模型。

例如,我有一个包含一些文本框和下拉列表的编辑视图。

我是否应该将下拉列表分成新的视图模型,或者编辑视图是否有一个带有下拉列表列表的视图模型?

或者一般来说,我应该在单独的视图模型中分隔特殊输入字段吗?

视图何时应具有多个视图模型?何时不是?

4 个答案:

答案 0 :(得分:6)

没有明确规定如何正确创建和组织视图模型。你的问题太模糊,无法回答,因为你提供的背景太少了。

我通常根据它们所代表的屏幕的功能块/部分对视图模型进行分组。例如,假设您有一个由多个部分/字段集组成的复杂表单,例如联系人详细信息,交付地址,账单信息等...地址可以由街道,邮政编码,城市和国家/地区下拉列表组成。我将创建一个包含这四个属性的地址视图模型,以便它可以在多个视图/部分视图中重用。这也将使验证更容易,因为依赖属性将被打包到相同的视图模型中,例如验证,例如给定的zip对应于城市,并且城市属于所选的国家。

  

例如,我有一个编辑视图   一些文本框和下拉列表。

     

我应该将下拉列表分开   进入一个新的视图模型或shoud   编辑视图有一个viewmodel   下拉列表的列表?

我会说不,如果这些字段在某种程度上与功能相关。

结论:您必须在屏幕上每个字段的视图模型和每个应用程序的单个视图模型之间找到适当的平衡。

答案 1 :(得分:1)

我更喜欢每个视图/局部视图的一个视图模型的方法。如果您认为视图模型的单一目的应该是对视图建模,那么在我看来这是最好的方法。此范例还支持使用强类型视图,从而为视图模型绑定提供编译时错误检查,并获得intellisense的额外好处。在您想要重用某些逻辑的场景中,我发现通常可以通过将视图重新分解为部分视图并为这些局部视图提供自己的视图模型来满足它。应该强调的是,视图模型中不应存在域逻辑,因为它实际上属于域模型。

答案 2 :(得分:0)

如果要重复使用,则应将下拉列表分成新的视图模型。

答案 3 :(得分:0)

如果要存储键入视图使用的数据,通常需要使用ViewModel模式。对于UI特定的逻辑和细节,ViewHelper模式将更适合。

有关ViewModel的一些讨论,请参阅此文章。 http://theminimalistdeveloper.com/2010/08/21/why-when-and-how-to-use-typed-views-and-viewmodel-pattern-in-asp-net-mvc/