代码之家  ›  专栏  ›  技术社区  ›  Jørn Schou-Rode dscher

类似于Html.RenderAction(),但没有重新实例化控制器对象

  •  6
  • Jørn Schou-Rode dscher  · 技术社区  · 14 年前

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

    我唯一的“问题”是 渲染 以一种始终创建控制器类的新闻实例的方式构建,即使在呈现来自已在运行的控制器的操作时也是如此。我的一些控制器在 Initialize 方法,并使用 渲染 视图中的方法会导致在同一请求中多次发生这种情况。

    有别的选择吗 渲染 如果要调用的操作方法与“父”操作在同一个控制器类上,哪个将重用controller对象?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Daniel Elliott    14 年前

    你可以在你的控制器中调用这个。

    e、 g主控制器About action方法中的this.Index()将导致索引视图在没有再次进行控制器初始化的情况下呈现。但这只适用于整页。

    renderPartial可以为您工作,但是您必须确保“元素”(边栏等)在父视图模型中拥有所需的所有数据。

    e、 g RenderPartial(“侧边栏”,ViewData.Model)。如果ViewModel包含了partials所需的所有内容,则可以将它们添加到共享视图的顶部,而控制器只需设置初始ViewMoel。

    仁慈,