当前位置:  开发笔记 > 后端 > 正文

RenderAction RenderPartial

如何解决《RenderActionRenderPartial》经验,为你挑选了1个好方法。

根据我的理解Html.RenderPartial,ASP.NET MVC版本HTML.RenderActionMicrosoft.Web.Mvc.ViewExtensions包含的内容与MVC Futures中包含的内容之间存在很大差异.

在我的应用程序中,我有许多页面由许多"小部件"(类型)组成,每个小部件都有自己的特定功能.

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

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

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

并用它来调用它

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

将正确呈现:

但是使用相同的等价物RenderAction(因此MessageForm在控制器上使用动作方法来渲染视图)将无法正确渲染:

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

将呈现:


请注意,该操作为空.

这是使用RenderAction帮助程序的正确方法吗?在这种情况下使用它是否正确?

更新:实际上将部分视图重命名为_MessageForm会正确地呈现表单.



1> Palantir..:

非常古老,但它跳进了我未回答的问题清单:)

RenderAction和之间有很大的不同RenderPartial.RenderPartialView在同一个控制器(或共享控制器)上呈现一个,同时RenderAction实际执行MVC的整个循环,即:它将实例化控制器(你提到的任何控制器,而不仅仅是当前控制器),它将执行动作,然后它将返回并呈现结果.

RenderPartial更类似于一个inclusion,它甚至会共享相同的模型,如果你不指定一个不同的.

RenderAction更为复杂(也有可能是不希望的副作用,这就是为什么他们没有让使用此功能,因为版本1 -最初它是可以作为一个实验性的功能).

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

我有一个负责新闻对象的新闻控制器.我创建了一个Block动作,它将呈现一个块,其中包含要放入主页的最新消息.在我看来,对于RenderAction来说,这是一个很好的例子.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有