Html.RenderPartial
和MVC Futures中的HTML.RenderAction
有很大的区别。在我的应用程序中,每个页面都由许多“小部件”(类似于)组成,每个小部件都有自己特定的功能。使用
RenderAction
方法似乎更合理,因为每个小部件都会有一个专门的控制器负责获取不同的数据并呈现专门的视图(与只有一个控制器和唯一的视图模型传递到RenderPartial
助手以呈现视图相反)。从我所做的测试来看,创建指向控制器中Create动作方法的表单,例如:
<% 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="">
请注意,这个 action 是空的。这是使用 RenderAction 辅助程序的正确方式吗?在这种情况下使用它是否正确?
更新: 事实上,将部分视图重命名为 _MessageForm 可以正确渲染表单。