相关疑难解决方法(0)

Html.Partial vs Html.RenderPartial&Html.Action vs Html.RenderAction

在ASP.NET MVC中,有什么区别:

  • Html.PartialHtml.RenderPartial
  • Html.ActionHtml.RenderAction

.net asp.net-mvc renderpartial partial-views renderaction

1013
推荐指数
12
解决办法
56万
查看次数

RenderAction RenderPartial

根据我的理解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" })) {%>
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会正确地呈现表单.

asp.net-mvc

47
推荐指数
1
解决办法
4万
查看次数