什么时候适合使用Html.RenderAction()?

时间:2010-02-24 10:15:38

标签: asp.net-mvc renderpartial renderaction

我有点不确定何时使用Html.RenderAction()来渲染我的视图以及何时不使用它。我的理解是,因为它不是ASP.NET MVC的“官方”组件,所以使用它是不好的做法,它的初衷是用于任何特定Controller上下文中都不存在的可重用小部件。

问题是,当我需要一个存在于不同Controller下的组件时,RenderAction非常有用,而不是我当前渲染View的那个。我认为这是一个非常整洁的&自包含的方式来呈现依赖于当前视图中不可用的数据的组件。我的视图不需要提供模型,就像我使用RenderPartial()

时那样

这是不好的做法吗?还有更好的方法吗?

4 个答案:

答案 0 :(得分:4)

它可以解决您的问题。

答案 1 :(得分:3)

  

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

一样

实际上是。例如,您可以创建一些小视图作为小部件,并将它们注入到您需要的任何位置。然而,从这些小部件处理用户输入可能会变得复杂,但这是另一个问题。

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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