在ASP.NET MVC2中,如何正确使用模型与部分视图?

3
我对MVC模式还比较陌生,但现在我对该模式感到比较舒适,特别是发现ViewModels是控制器和视图之间的一个极好的桥梁。
然而,我现在需要使用Partial Views,但有点困惑。
需求
我们有许多不同的页面,但共享一个常见的“网格”(grid)。
该网格将成为一个Partial View,并始终呈现/消耗/操作相同类型的数据。
问题
因此,包括部分视图的主要视图将具有不同的模型...那么我如何在部分视图中处理模型。
是否应该为使用某个Partial View的所有视图的模型都添加一个嵌套模型作为属性?
这里有什么最佳实践?
谢谢。

1
您能否举个“View” / “Partial View” / “Model”的例子,这样我们才能帮您提供最佳实践。 - RPM1984
嗨 rpm。视图是一个完整的视图,它具有模型并与操作相关联。部分视图是可重用的视图片段,可以嵌入具有潜在不同模型的不同视图中。模型是一个完整的数据结构,其中包含控制器可能需要的所有内容,反之亦然。 - andy
1个回答

2
我发现当我组合一个Partial时,如果考虑该Partial的Model会对帮助很大。通常情况下,Partial应使用整个View模型中数据的自然子集或变体。如果您一开始就这样考虑,那么不必过多思考“我的Partial应使用哪个模型”可能意味着您应该创建一个不同的Partial而不是尝试重用一个。
如果您必须为Partial重新构建新模型,则问题可能在于整个View的模型未覆盖您所需的所有内容。
话虽如此,有很多时候我有一个Partial使用的模型似乎与整个View的模型分离。但是大多数情况下,这些模型是新/空对象——不需要实例化并设置属性等(这通常发生在正在使用Ajax相关更新的Partial上)。
请注意,MVC2也有类似的功能,Html.RenderAction()可以让您调用一个全新的Action(它将拥有自己的模型),并在当前View中进行渲染。其实我尽量避免使用它,但是相比为Partial构建一些新模型或在当前ViewModel中添加不自然的信息,我觉得使用它会更好。

非常好的建议,谢谢。是的,我认为子集的想法可能是最好的... - andy
在 Partial 中经常出现的一个“子集”是将单个实体对象呈现在主模型中的列表中,例如。当然,有时它可能只是 ViewModel 的单个成员。 - Andrew Barber
酷啊...创建一个包含部分视图使用的属性的父模型,然后创建一个从该父模型继承的子模型,所有使用部分视图的主视图都使用该子模型...这样做有意义吗?谢谢! - andy
部分视图的意义在于,如果您必须为它们提供服务,则需要在每个主视图模型中进行处理吗? 部分视图真的只是关于共享“视图”或cshtml文件,而不应该有自己的模型或控制器吗? - Gineer
@Gineer Partial的作用是封装和重复使用常见的UI代码块。正确使用Partial可以节省编码时间,即使你必须“迎合”它们。这就是“诀窍”:如果使用它们可以节省足够的代码,请使用。如果不行 - 则不要使用。 - Andrew Barber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接