RenderAction RenderPartial

据我Html.RenderPartial ,ASP.NET MVC版本中包含的HTML.RenderAction与MVC Futures中包含的Microsoft.Web.Mvc.ViewExtensionsHTML.RenderAction有很大的区别。

在我的应用程序中,我有许多由许多“窗口小部件”组成的页面,每个页面都有自己的特定function。

在我看来更合理的是使用RenderAction方法,因为每个小部件都有一个专门的控制器负责获取不同的数据和渲染专用的视图(而不是只有一个控制器和唯一的视图模型传递给RenderPartial助手来渲染视图)。

从testing中我已经做了一个表单,指向一个控制器中的Create操作方法,如:

  <% using (Html.BeginForm("Create", "Message", FormMethod.Post, new { id = "messageCreateForm" })) {%> 

并用它来调用它

  <% Html.RenderPartial("MessageForm",new MessageDTO()); %> 

会正确渲染a:

 <form id="messageCreateForm" method="post" action="/Message/Create"> 

但与RenderAction相同(因此,使用控制器上的MessageForm操作方法来呈现视图)将无法正确呈现:

  <% Html.RenderAction<MessageController>(m => m.MessageForm()); %> 

将呈现在:

 <form id="messageCreateForm" method="post" action=""> 

请注意,该操作是空的。

这是使用RenderAction助手的正确方法,是否正确使用它呢?

更新:其实重命名_MessageForm的部分视图渲染formscorrecly。

非常老,但它跳进我的未回答的问题列表:)

RenderActionRenderPartial之间有很大的区别。 RenderPartial会在同一个控制器(或共享控制器)上渲染一个View ,而RenderAction实际上会执行一个完整的MVC循环,也就是:它将实例化控制器(你提到的任何控制器,而不仅仅是当前的控制器)执行该动作,然后它将返回并呈现结果。

RenderPartial更类似于inclusion ,如果不指定不同的模型,甚至会共享相同的模型。

RenderAction要复杂得多(可能会有不希望的副作用,这就是为什么他们没有从版本1开始使用这个function – 最初它是作为一个实验性function提供的)。

所以在你的情况下,如果你有小部件,可以同时使用它们。 这取决于小部件的复杂性。 如果你有一个必须从数据库获取数据,做一些复杂的,等等…那么你应该使用RenderAction

我有一个新闻控制器负责新闻对象。 我创build了一个Block动作,它将渲染一个块,并在主页中放入最新消息。 在我看来,这是RenderAction的一个很好的例子。

使用MVC需要非常注意不要在脚下自己拍摄。 我的意思是说MVC产品的效率。 在复杂的项目中,我更喜欢使用RenderPartial而不是RenderAction。 我使用RenderPartial,我使用jQuery.ajax请求(使用Html.Action)。 它肯定比RenderAction更高效。 通过这种方式,你可以把你的视图caching,然后调用jQuery.ajax。 试试吧。 Ayende在冬眠犀牛清楚地解释它。