对于我来说,何时使用自定义辅助方法以及何时使用RenderAction以及何时只使用ViewData,我有点不清楚。他们的一些功能略有重叠。
例如,如果我要创建一个类别导航栏,我是否会创建一个新的辅助方法并将其放在某个局部视图中?我最初虽然这样做,但我在一些博客上读到使用RenderAction代替。我一直在思考,并且可以使用一些帮助而不仅仅是这个例子,但总的来说。
假设类别列表来自某些数据源。
答案 0 :(得分:18)
我遵循的一般指南是:
HtmlHelper方法:
渲染部分:
渲染动作:
<强>的ViewData:强>
我将使用ViewData跟踪适用于所有视图的全局数据,例如当前用户。如果我需要一种显示此数据的一致方法,我通常会为它创建一个部分,然后在母版页中执行RenderPartial()。
答案 1 :(得分:2)
首先,这可能很清楚,但是让我们说:类别业务逻辑(例如从数据源获取数据)不应该在Html帮助器或用户控件中:它应该在控制器中完成。
1)RenderPartial / HtmlHelper与2)RenderAction之间的区别在于 控制器这个业务逻辑是:
如果您在几乎每个页面中使用类别数据,我认为在页面控制器操作级别上为每个页面获取它并没有错误,并将其传递给视图数据。当然你会使用一些机制(自定义模型基类,扩展控制器......),这样你就不会在每个动作中都有相同的类别获取函数调用(假设你有很多)。
如果某些页面视图选择显示类别,而某些页面视图可能还有一些类别控件具有不同的业务逻辑,那么RenderAction肯定会更好。即使在上述情况下,RenderAction也很好:它将类别提取与控制器操作中的其他数据分开。
然后是否使用RenderPartial或HtmlHelper ...对我而言,HtmlHelpers应该更通用,而不是特定于特定视图或模型,但是我认为,这比MVC视角中的明确规则更重要:两者都应该是只是查看逻辑。
答案 2 :(得分:1)
当场景符合以下条件时,我会选择html辅助方法:
如果你有一个使用模型数据的html辅助方法,或者它有很多依赖关系,那么它可能更适合作为RenderPartial或RenderAction。
答案 3 :(得分:0)
我也是使用RenderAction的新手
但是当我需要为特定的显示器加载数据时,我现在就去了 的RenderAction
非常适合加载标记云,标记云显示在每个页面上,但数据并非特定于页面。