我有一个视图,可以加载其他几个局部视图,根据需要将数据从原始视图的模型传递到部分视图。
我的问题是,我应该创建单独的控制器(表示不同的数据库对象)并使用Html.RenderAction()
从原始视图加载部分视图,还是可以立即执行所有业务逻辑,将其放入我的视图模型,并使用Html.Partial()
?
如果我创建了分隔控制器并使用了Html.RenderAction()
,那么除了原始视图之外的任何地方都不会访问这些操作(所有操作都是部分视图),所以这样做似乎很奇怪。
我仍然有其他控制器作为网站的端点,但这似乎是一个不同的情况,创建更多仅部分视图操作的控制器似乎没用。
这里有一些标准做法,还是只是偏好?
答案 0 :(得分:3)
您不应该使用Html.RenderAction(),因为这会创建一个可能对性能产生负面影响的新MVC管道。您通常应该使用Html.Partial()或Html.RenderPartial()。至于创建单独的控制器,它实际上取决于您的场景。如果这些部分操作应该与该控制器进行逻辑分组,我会把它们放在那里,但是如果控制器变得过于单一,或者你的部分可能是某种在网站的许多不同区域显示的小部件,那么放置它可能会很好它们在一个单独的WidgetController中。
总结:使用Html部分帮助程序来避免额外的MVC管道,决定在特定情况下使用哪个控制器用于部分。
编辑:我错误地记得Action和Partial方法之间的区别。尽可能使用Partial()和RenderPartial()。这些确实避免创建另一个管道;缺点是你需要获取主要操作中返回的所有信息并通过父视图传递。 Action()和RenderAction()在性能方面较重,但它们可用于调用外部控制器和操作,允许您在必要时分离逻辑。