根据我的理解Html.RenderPartial,ASP.NET MVC版本HTML.RenderAction中Microsoft.Web.Mvc.ViewExtensions包含的内容与MVC Futures中包含的内容之间存在很大差异.
在我的应用程序中,我有许多页面由许多"小部件"(类型)组成,每个小部件都有自己的特定功能.
在我看来,使用该RenderAction方法更合理,因为每个小部件都有一个专用控制器,负责获取不同的数据并呈现专用视图(而不是只有一个控制器和一个唯一的视图模型传递给RenderPartial帮助器来呈现视图).
从测试中我已经完成了一个指向控制器中的Create动作方法的表单,如:
<% using (Html.BeginForm("Create", "Message", FormMethod.Post,
new { id = "messageCreateForm" })) {%>
Run Code Online (Sandbox Code Playgroud)
并用它来调用它
<% Html.RenderPartial("MessageForm",new MessageDTO()); %>
Run Code Online (Sandbox Code Playgroud)
将正确呈现:
<form id="messageCreateForm" method="post" action="/Message/Create">
Run Code Online (Sandbox Code Playgroud)
但是使用相同的等价物RenderAction(因此MessageForm在控制器上使用动作方法来渲染视图)将无法正确渲染:
<% Html.RenderAction<MessageController>(m => m.MessageForm()); %>
Run Code Online (Sandbox Code Playgroud)
将呈现:
<form id="messageCreateForm" method="post" action="">
Run Code Online (Sandbox Code Playgroud)
请注意,该操作为空.
这是使用RenderAction帮助程序的正确方法吗?在这种情况下使用它是否正确?
更新:实际上将部分视图重命名为_MessageForm会正确地呈现表单.
Pal*_*tir 80
非常古老,但它跳进了我未回答的问题清单:)
RenderAction和之间有很大的不同RenderPartial.RenderPartial将View在同一个控制器(或共享控制器)上呈现一个,同时RenderAction实际执行MVC的整个循环,即:它将实例化控制器(你提到的任何控制器,而不仅仅是当前控制器),它将执行动作,然后它将返回并呈现结果.
该RenderPartial更类似于一个inclusion,它甚至会共享相同的模型,如果你不指定一个不同的.
在RenderAction更为复杂(也有可能是不希望的副作用,这就是为什么他们没有让使用此功能,因为版本1 -最初它是可以作为一个实验性的功能).
所以在你的情况下,如果你有小工具,可以同时使用它们.这取决于小部件的复杂性.如果你有一个必须从数据库获取数据,做一些复杂的事情......等你应该使用RenderAction.
我有一个负责新闻对象的新闻控制器.我创建了一个Block动作,它将呈现一个块,其中包含要放入主页的最新消息.在我看来,对于RenderAction来说,这是一个很好的例子.
| 归档时间: |
|
| 查看次数: |
38270 次 |
| 最近记录: |