【问题标题】:When Is It Appropriate to Use Html.RenderAction()?什么时候使用 Html.RenderAction() 合适?
【发布时间】:2010-02-24 10:15:38
【问题描述】:

我有点不确定什么时候适合使用Html.RenderAction() 来呈现我的视图,什么时候不适合。我的理解是,因为它不是 ASP.NET MVC 的“官方”组件,所以使用它是不好的做法,它的初衷是用于任何特定控制器上下文中不存在的可重用小部件。

问题是,当我需要一个存在于与我当前为其呈现视图的控制器不同的控制器下的组件时,RenderAction 非常有用。我认为这是一种非常整洁且自包含的方式来呈现依赖于当前视图中不可用数据的组件。我的视图不需要提供模型,就像我使用 RenderPartial() 时一样

这是不好的做法吗?有没有更好的办法?

【问题讨论】:

    标签: asp.net-mvc renderpartial renderaction


    【解决方案1】:

    万一它解决了你的问题也没关系。

    【讨论】:

      【解决方案2】:

      我认为这是一种非常整洁且自包含的方式来呈现依赖于当前视图中不可用数据的组件。我的视图不需要提供模型,就像我使用 RenderPartial() 一样

      确实如此。例如,您可以创建一些小视图作为小部件并将它们注入您需要的任何地方。然而,处理来自这些小部件的用户输入可能会变得更加复杂,但这是另一个问题。

      我能想到的另一个合法场景是使用 HTML 电子邮件模板。这是一种情况,您显然不需要将呈现的输出直接返回到浏览器,而是将其插入到电子邮件正文中。

      【讨论】:

        【解决方案3】:

        出于您给出的原因,我使用Html.RenderAction(),这样您就不必一遍又一遍地向需要显示用户信息的每个视图(例如)提供相同的数据。您可以争辩说它违反了 mvc 模式,因为视图现在知道控制器。但我认为这种情况下的优势超过了这一点,并且您的应用程序将更加 DRY。

        我只是将它用于我需要在许多不同地方重用的所有内容(例如,我在母版页的每个页面上显示的用户数据)并且我不想将该信息显式发送到每个视图。如果我没记错的话,我认为他们也将它包含在 asp.net mvc 2 中,所以它现在是框架的一部分。

        【讨论】:

        • 为什么不创建一个提供用户信息的基本模型类,并将其传递给视图?不管你喜不喜欢,向视图提供数据控制器和模型的责任,这对我来说似乎并不太烦人。
        【解决方案4】:

        我找到了在基于父视图模型结果的场景中使用 Html.RenderAction 的重要理由。例如,父视图的模型有一个必须显示在表格中的 List 属性。但是,为了防止父视图中出现条件 IF/ELSE,我调用了 Html.RenderAction()。该操作在列表中进行并检查计数。如果计数为零,则返回“无结果”视图;否则,它会返回一个视图,该视图以自己的模型形式处理 List 中的项目。通过防止在视图中插入逻辑,这更清晰。我还可以在我的应用程序的其他区域重复使用“无结果”视图。

        【讨论】:

          猜你喜欢
          • 2011-09-13
          • 2010-10-08
          • 1970-01-01
          • 1970-01-01
          • 2019-02-28
          • 2019-09-17
          • 2019-08-25
          • 2011-03-11
          • 2011-08-09
          相关资源
          最近更新 更多