0

我有一个加载其他几个局部视图的视图,根据需要将数据从原始视图的模型传递到局部视图。

我的问题是,我应该创建单独的控制器(代表不同的 db 对象)并用于Html.RenderAction()从原始视图加载部分视图,还是可以一次完成所有业务逻辑,将其放入我的视图模型中,并使用Html.Partial()?加载部分视图

如果我创建了单独的控制器并使用了Html.RenderAction(),那么除了原始视图(所有操作都是局部视图)之外,这些操作将无法在任何地方访问,所以这样做似乎很奇怪。

我仍然有其他控制器充当网站的端点,但这似乎是另一种情况,创建更多具有部分视图操作的控制器似乎没用。

这里有一些标准做法,还是此时只是偏好?

4

1 回答 1

3

您不应该使用 Html.RenderAction(),因为这会创建一个新的 MVC 管道,这会对性能产生不利影响。您通常应该使用 Html.Partial() 或 Html.RenderPartial()。至于创建单独的控制器,它真的取决于你的场景。如果这些部分操作应该与该控制器进行逻辑分组,我会将它们放在那里,但如果控制器变得过于单一,或者您的部分操作可能是显示在您网站的许多不同区域上的某种小部件,那么放置它们可能会很好它们在一个单独的 WidgetController 中。

总结:使用 Html 部分帮助程序来避免额外的 MVC 管道,确定在您的特定情况下对部分使用哪个控制器是有意义的。

编辑:我记错了 Action 和 Partial 方法之间的区别。尽可能使用 Partial() 和 RenderPartial()。这些确实避免了创建另一个管道;缺点是您确实需要获取主要操作中返回的所有信息并通过父视图传递。Action() 和 RenderAction() 在性能方面比较重,但是它们可以用来调用外部的控制器和动作,允许你在必要时分离你的逻辑。

于 2013-06-24T18:54:39.963 回答