Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC视图模型的最佳实践_Asp.net_Asp.net Mvc_Viewmodel - Fatal编程技术网

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

ASP.NET MVC视图模型的最佳实践,asp.net,asp.net-mvc,viewmodel,Asp.net,Asp.net Mvc,Viewmodel,我问自己如何正确创建视图模型 例如,我有一个带有一些文本框和下拉列表的编辑视图 我应该将下拉列表分离到一个新的视图模型中,还是编辑视图应该有一个带有下拉列表列表的视图模型 或者一般来说,我应该在单独的视图模型中分离特殊的输入字段吗 什么时候一个视图应该有多个视图模型,什么时候不应该?如果您希望可重用,您应该将下拉列表分为新的视图模型。对于如何正确创建和组织视图模型,没有明确的规则。您的问题太模糊,无法回答,因为您提供的上下文太少 我通常根据功能块/它们所代表的屏幕部分对视图模型进行分组。例如,假

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

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

我应该将下拉列表分离到一个新的视图模型中,还是编辑视图应该有一个带有下拉列表列表的视图模型

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


什么时候一个视图应该有多个视图模型,什么时候不应该?

如果您希望可重用,您应该将下拉列表分为新的视图模型。

对于如何正确创建和组织视图模型,没有明确的规则。您的问题太模糊,无法回答,因为您提供的上下文太少

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

例如,我有一个带有 一些文本框和下拉列表

我应该把下拉列表分开吗 进入一个新的视图模型,或者 “编辑视图”有一个带有 下拉列表的列表

如果这些字段在功能上有某种关联,我会说不


结论:您必须在屏幕上的每个字段都有一个视图模型和每个应用程序都有一个视图模型之间找到正确的平衡。

如果您想存储类型化视图所使用的数据,通常需要使用ViewModel模式。对于特定于UI的逻辑和细节,ViewHelper模式更适合


有关ViewModel的一些讨论,请参阅本文

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

我浏览了这篇文章,我想知道为什么会有一个模型目录和一个ViewModel目录?模型目录用于视图模型。提到的模型目录看起来像域模型/对象模型。所以他们所做的就是创建一个由两个域对象组成的视图模型。@Rookian。是的,你是对的。ViewModel用于ViewModels,而Model用于域/业务模型。关于创建您提到的可重用子ViewModels-如果您更改了Address ViewModel,因为您只需要为一个特定视图修改它,该更改将影响使用Address ViewModel的其他视图,即使您缩进以仅更改一个视图?