一直在研究一个宠物项目,以便更好地学习asp.net mvc。我的问题是关于mvc中的viewmodels。我理解控制器应该处理视图和模型之间的交互。我觉得我不得不创建viewmodel类来组合模型中的信息以传递给视图。
这是不好的做法吗?我应该在其他地方做更多的逻辑并减少视图模型吗?
目前,我几乎每个主要观点都有一个视图模型。但我绝对不希望视图直接访问模型。
答案 0 :(得分:8)
不,您的所有视图都应该是强类型的,因此对每个视图使用一个视图模型是最佳做法。 Here是关于viewmodels的非常好的文章。
答案 1 :(得分:2)
您使用的视图模型越多越好。视图模型允许您创建单个对象,该对象可以包含模型中不同类型的数据。这些在创建模板时非常有用。此外,这在使用JQuery和Ajax时非常有用,因为它是将数据传递到控制器然后直接传递给DOM的好方法。在我看来,使用尽可能多的viewmodel。
您可能考虑的另一件事是尝试更好地设计您的模型。我个人尝试像sql数据库一样构建我的模型并遵循规范化表单。除了您已有的模型之外,您不必为每个视图创建新的视图模型。如果您需要将信息传递给不属于您正在使用的模型的视图,请使用ViewData或ViewBag。它们作为对象传递,因此您必须将它们转换为适当的类。
答案 2 :(得分:0)
这没什么不好的。你的视图模型越接近视图越好。
模型无法特定匹配View,因此您可以使用ViewModel类。
答案 3 :(得分:0)
这里有很好的答案,这里是我对很多视图模型不成问题的看法。 您的ViewModel是一种很好的方法,可以将纯数据访问对象甚至是域对象与表示层分离,并为您的视图提供这些对象的简化版本。
您的观点应该是愚蠢的,对我个人来说,我试图实现的是将我的域模型按到ViewModel中以供我使用。
答案 4 :(得分:-3)
使用大量的viewmodels会在项目中造成混乱。最好在控制器中创建Tuple
然后传递它。