像Html.RenderAction()但没有重新实例化控制器对象

时间:2009-12-13 13:21:23

标签: asp.net-mvc renderaction

我喜欢在RenderAction对象上使用HtmlHelper扩展方法在页面中呈现侧边栏等,因为它允许我在不同的方法中保留每个这样的部分的数据访问代码控制器。使用抽象控制器库,我可以定义一个默认的“侧边栏策略”,然后可以在需要时通过覆盖具体控制器中的方法来改进它。

我使用这种方法的唯一“问题”是,RenderAction的构建方式始终是创建控制器类的新闻实例,即使从控制器中呈现动作已经在行动中。我的一些控制器在Initialize方法中进行了一些数据查找,并且在视图中使用RenderAction方法会导致在同一请求中多次出现这种情况。

如果要调用的操作方法与“父”操作位于同一控制器类上,是否有RenderAction的替代方法将重用控制器对象?

1 个答案:

答案 0 :(得分:1)

您可以在控制器中调用此。[ActionName]。

例如,家庭控制器的About动作方法中的this.Index()将导致索引视图被渲染,而无需再次通过控制器初始化。这只适用于整个页面。

renderPartial适用于您,但您必须确保“元素”(侧边栏等)在父视图模型中具有所需的所有数据。

例如RenderPartial(“SideBars”,ViewData.Model)。如果您的ViewModel包含部分所需的所有内容,则可以将它们添加到共享视图的顶部,而您的控制器只需要设置初始ViewMoel。

善,