Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 mvc-2中一个页面上的强类型局部视图是否应该有一个组合视图模型?_Asp.net Mvc_Asp.net Mvc 2_Viewmodel_Partial Views_Strongly Typed View - Fatal编程技术网

Asp.net mvc asp.net mvc-2中一个页面上的强类型局部视图是否应该有一个组合视图模型?

Asp.net mvc asp.net mvc-2中一个页面上的强类型局部视图是否应该有一个组合视图模型?,asp.net-mvc,asp.net-mvc-2,viewmodel,partial-views,strongly-typed-view,Asp.net Mvc,Asp.net Mvc 2,Viewmodel,Partial Views,Strongly Typed View,我有一个关于asp.net mvc-2强类型局部视图和视图模型的问题 我只是想知道我是否可以(或者应该)在一个页面上拥有两个强类型的部分视图,而不必为该页面实现一个全新的视图模型 例如,我有一个显示个人资料的页面,但也有一个用于添加快速联系人的内联表单。每个实体都有自己的视图模型,即我有一个ProfileViewModel和一个ContactViewModel 因此,我的视图需要两个强类型的局部视图,一个使用ProfileViewModels的IEnumerable列表,另一个使用Contact

我有一个关于asp.net mvc-2强类型局部视图和视图模型的问题

我只是想知道我是否可以(或者应该)在一个页面上拥有两个强类型的部分视图,而不必为该页面实现一个全新的视图模型

例如,我有一个显示个人资料的页面,但也有一个用于添加快速联系人的内联表单。每个实体都有自己的视图模型,即我有一个ProfileViewModel和一个ContactViewModel

因此,我的视图需要两个强类型的局部视图,一个使用ProfileViewModels的IEnumerable列表,另一个使用ContactViewModel。是否可以或希望避免创建第三个视图模型,即此页面的“IndexViewModel”,其中包含ProfileViewModels和ContactViewModel的列表?实现这种视图模型不是一种错误的做法,还是因为它导致视图模型更少而更加整洁


谢谢

如果两个局部视图都需要已定义的视图模型,那么承载这些局部视图的页面需要以某种方式提供视图模型。很容易想象,当联系人信息可能从后端到达时,必须如何向包含页面提供
IEnumerable
ContactViewModel
是否实际包含任何数据?如果没有,您可以在包含页面的视图中当场创建它,并且只向它传递一个
IEnumerable

否则,包含视图需要同时接收
IEnumerable
ContactViewModel
。我所倾向的选择实际上是定义一个新的视图模型,其中包含这两个值的数据成员。与通过
ViewData[]
传递这些值相比,它有更好的文档记录,并允许更好的编译器类型检查

在您的问题中,有一点隐含着这样的概念,即创建视图模型是一件繁琐的事情。如果视图模型的定义仅反映某个后端实体的定义,则局部视图的情况可能确实如此。如果是这样的话,您可能需要考虑直接传递后端实体,而不是在视图模型中复制其定义和内容。
最后,视图模型只是一种工具。如果它们增加了价值,就使用它们。一些应用程序通过使用不同的视图模型类获得清晰性、文档和松耦合优势。其他应用程序(通常是较小的应用程序)的收益不足以弥补开销。不实现视图模型(或任何其他设计模式)并没有什么本质上的“坏习惯”。如果您有一个合理的理由支持它,您可以放心地选择它。

谢谢。似乎创建另一个视图模型会更整洁、更容易测试?尤其是制作一个并不难。有时很难看出什么是好的实践,什么是简单的设计选择,这对我帮助很大。我怎么能成为第一个给这个a+1的人?回复不错,谢谢!