【问题标题】:How do I create composite views in ASP.Net MVC 3?如何在 ASP.Net MVC 3 中创建复合视图?
【发布时间】:2011-04-06 15:34:46
【问题描述】:

如何在 ASP.Net MVC 3 中创建一个视图,将视图的一部分的创建/呈现推迟到另一个视图/控制器,而在 设计 时不知道视图/控制器将是什么推迟到?

我有一个使用布局页面的仪表板视图/控制器。仪表板视图完成了渲染整个屏幕的大部分工作。然而,整个屏幕的某个占位符部分会根据业务规则、配置、用户交互等而有所不同。可能需要在占位符部分呈现三个单独的插件视图/控制器。一旦仪表板控制器确定哪个插件应该可见,我如何指示仪表板视图呈现特定的插件视图。我已经通过在仪表板模型中放置标志,然后在仪表板视图中使用基于标志的适当参数的条件逻辑调用 Html.RenderAction 来实现这一点。这似乎不能令人满意,我假设已经有一个简单的内置功能用于这种场景,请告知。

谢谢

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    您实际上是在问“我如何动态渲染在设计时知道其身份的部分视图。”

    可以通过两种方式实现,通过 Html.RenderPartial 或 Html.RenderAction。两者都有自己的位置。如果主页“知道”足以拥有视图数据,那么 RenderPartial 是您更好的选择,因为它比 RenderAction 更有效。例如,如果您只知道门户小部件的唯一标识符,那么 RenderAction 就可以工作,因为您现在拥有一个功能齐全的控制器方法,可以执行诸如返回数据库和呈现视图之类的操作。

    【讨论】:

    • 实际上你错过了我在设计时不知道哪些插件将被加载的关键点,直到运行时才知道。
    • RenderPartial 将一个字符串和一个对象作为参数,在运行时很容易覆盖。 RenderAction 是一个控制器方法,因此它可以自己加载对象并确定要渲染的视图。我知道,我有一些基于小部件的系统正是这样做的,以呈现在设计时甚至不存在的组件。
    【解决方案2】:

    您可以编写自己的 htmlhelper 并在您的视图中使用它,而不是使用标志。

    【讨论】:

      猜你喜欢
      • 2012-12-19
      • 2015-12-02
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多