据我所知,ASP.NET MVC发行版中包含的Html.RenderPartial与MVC中包含的Microsoft.Web.Mvc.ViewExtensions中的HTML.RenderAction有很大的不同。
在我的应用程序中,我有许多由许多“小部件”(某种程度上)组成的页面,每个小部件都有自己的特定功能。
在我看来,使用RenderAction方法更合理,因为每个小部件都有一个专用的控制器,负责获取不同的数据并呈现一个专用的视图(而不是只有一个控制器和一个独特的视图模型传递给RenderPartial helper来呈现视图)。
从测试中,我已经完成了一个指向控制器中的Create action方法的表单,如下所示:
<% using (Html.BeginForm("Create", "Message", FormMethod.Post,
new { id = "messageCreateForm" })) {%>并使用以下命令调用它
<% Html.RenderPartial("MessageForm",new MessageDTO()); %>将正确地呈现一个:
<form id="messageCreateForm" method="post" action="/Message/Create">但使用与RenderAction相同的等价物(因此在控制器上使用MessageForm操作方法来呈现视图)将不能正确呈现,如下所示:
<% Html.RenderAction<MessageController>(m => m.MessageForm()); %>将在以下位置渲染:
<form id="messageCreateForm" method="post" action="">请注意,该操作为空。
这是使用RenderAction帮助器的正确方式吗?在这样的情况下使用它正确吗?
更新:实际上将局部视图重命名为_MessageForm可以正确地呈现表单。
发布于 2009-10-06 13:57:38
非常老的一个,但它跳到了我的未回答问题列表中:)
RenderAction和RenderPartial之间有很大的不同。RenderPartial将在同一控制器(或共享控制器)上呈现View,而RenderAction实际上将执行整个MVC周期,即:它将实例化控制器(您提到的任何控制器,而不仅仅是当前控制器),它将执行操作,然后它将返回并呈现结果。
RenderPartial更类似于inclusion,如果您不指定不同的模型,它甚至会共享相同的模型。
RenderAction要复杂得多(而且可能会有不受欢迎的副作用,这就是为什么他们从版本1开始就没有提供这个功能--最初它是作为一个实验特性提供的)。
因此,在您的示例中,如果您有小部件,可以同时使用这两个小部件。这取决于小部件的复杂程度。如果你有一个必须从数据库获取数据,做一些复杂的事情,等等……那么你可能应该使用RenderAction。
我有一个负责新闻对象的News控制器。我创建了一个块操作,它将渲染一个块与最新的新闻放在主页上。在我看来,这对RenderAction来说是一个完美的例子。
发布于 2012-10-27 02:13:45
使用MVC需要非常注意不要搬起石头砸自己的脚。我的意思是MVC产品的效率。在复杂的项目中,我更喜欢使用RenderPartial而不是RenderAction。我使用RenderPartial,其中我使用了jQuery.ajax请求(带有Html.Action)。它的工作效率肯定比RenderAction更高。通过这种方式,您可以将视图放入缓存中,然后调用jQuery.ajax。你们自己试试吧。阿延德在Hibernating Rhinos中清楚地解释了这一点。
https://stackoverflow.com/questions/719027
复制相似问题