首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RenderAction RenderPartial

RenderAction RenderPartial
EN

Stack Overflow用户
提问于 2009-04-05 14:43:44
回答 2查看 40.6K关注 0票数 47

据我所知,ASP.NET MVC发行版中包含的Html.RenderPartial与MVC中包含的Microsoft.Web.Mvc.ViewExtensions中的HTML.RenderAction有很大的不同。

在我的应用程序中,我有许多由许多“小部件”(某种程度上)组成的页面,每个小部件都有自己的特定功能。

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

从测试中,我已经完成了一个指向控制器中的Create action方法的表单,如下所示:

代码语言:javascript
复制
 <% using (Html.BeginForm("Create", "Message", FormMethod.Post, 
     new { id = "messageCreateForm" })) {%>

并使用以下命令调用它

代码语言:javascript
复制
 <% Html.RenderPartial("MessageForm",new MessageDTO()); %>

将正确地呈现一个:

代码语言:javascript
复制
<form id="messageCreateForm" method="post" action="/Message/Create">

但使用与RenderAction相同的等价物(因此在控制器上使用MessageForm操作方法来呈现视图)将不能正确呈现,如下所示:

代码语言:javascript
复制
 <% Html.RenderAction<MessageController>(m => m.MessageForm()); %>

将在以下位置渲染:

代码语言:javascript
复制
<form id="messageCreateForm" method="post" action="">

请注意,该操作为空。

这是使用RenderAction帮助器的正确方式吗?在这样的情况下使用它正确吗?

更新:实际上将局部视图重命名为_MessageForm可以正确地呈现表单。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-06 13:57:38

非常老的一个,但它跳到了我的未回答问题列表中:)

RenderActionRenderPartial之间有很大的不同。RenderPartial将在同一控制器(或共享控制器)上呈现View,而RenderAction实际上将执行整个MVC周期,即:它将实例化控制器(您提到的任何控制器,而不仅仅是当前控制器),它将执行操作,然后它将返回并呈现结果。

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

RenderAction要复杂得多(而且可能会有不受欢迎的副作用,这就是为什么他们从版本1开始就没有提供这个功能--最初它是作为一个实验特性提供的)。

因此,在您的示例中,如果您有小部件,可以同时使用这两个小部件。这取决于小部件的复杂程度。如果你有一个必须从数据库获取数据,做一些复杂的事情,等等……那么你可能应该使用RenderAction

我有一个负责新闻对象的News控制器。我创建了一个块操作,它将渲染一个块与最新的新闻放在主页上。在我看来,这对RenderAction来说是一个完美的例子。

票数 81
EN

Stack Overflow用户

发布于 2012-10-27 02:13:45

使用MVC需要非常注意不要搬起石头砸自己的脚。我的意思是MVC产品的效率。在复杂的项目中,我更喜欢使用RenderPartial而不是RenderAction。我使用RenderPartial,其中我使用了jQuery.ajax请求(带有Html.Action)。它的工作效率肯定比RenderAction更高。通过这种方式,您可以将视图放入缓存中,然后调用jQuery.ajax。你们自己试试吧。阿延德在Hibernating Rhinos中清楚地解释了这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/719027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档