我对ASP.NET MVC-2强烈键入部分视图和查看模型有一个疑问。

我只是想知道我是否可以(或应该)在一个页面上有两个强烈键入的部分视图,而无需为该页面实施全新的视图模型。

例如,我有一个显示配置文件的页面,但也有一个内联表格可以添加快速联系。这些实体中的每个实体都已经有自己的视图模型,即我有一个profileViewModel和一个ContactViewModel。

因此,我的视图需要两个强烈键入的部分视图,一种使用iEnumerable的profileViewModels列表,另一个使用ContactViewModel。避免制作第三视图模型,此页面的“ indexViewModel”,该页面是否可以包含ProfileViewModels和ContactViewModel列表?是否实现此视图模型不良练习,或者因为它导致较少的视图模型而进行更整理?

谢谢!

有帮助吗?

解决方案

如果两个部分视图都需要已经定义的视图模型,则托管这些部分需要以某种方式提供视图模型的页面。很容易想象 IEnumerable<ProfileViewModel> 必须向包含页面提供,因为联系信息可能是从后端到达的。做 ContactViewModel 实际持有任何数据?如果没有 IEnumerable<ProfileViewModel> 对此。

否则,包含的视图需要同时接收 IEnumerable<ProfileViewModel>ContactViewModel. 。我倾向于的选择确实是定义一个新的视图模型,该模型具有这两个值的数据成员。它的记录要好一些,并允许与通过这些值通过这些值的替代方案进行更好的编译器类型检查 ViewData[].

在您的问题中有些隐含的是,创建视图模型是一件琐事。如果视图模型的定义仅反映了某些后端实体的定义,那么对于部分视图来说确实很可能是这种情况。如果是这种情况,您可能需要考虑直接传递后端实体,而不是在视图模型中重复其定义和内容。

最后,视图模型只是一种工具。如果它们添加价值,请使用它们。某些应用程序从使用不同的视图模型类中获得了清晰度,文档和松散耦合的优势。其他经常较小的应用程序则没有足够的收益来值得开销。不实施视图模型(或任何其他设计模式,就此而言),没有什么天生的“不良练习”。如果您有合理的论点有利,这是一个设计选择。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top