据我了解,ASP.NET MVC 版本中包含的 Html.RenderPartial
与 中的
包含在 MVC Futures 中。HTML.RenderAction
之间存在很大差异。 Microsoft.Web.Mvc.ViewExtensions
在我的应用程序中,我有许多页面由许多“小部件”(某种程度上)组成,每个页面都有自己的特定功能。
在我看来,使用 RenderAction 方法更合理,因为每个小部件都有一个专用 Controller ,负责获取不同的数据并呈现专用 View (而不是只有一个 Controller 和一个唯一的 View ) View 模型传递给 RenderPartial 帮助器来渲染 View )。
根据我所做的测试,有一个表单指向 Controller 中的 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
相同的等效项(因此在 Controller 上使用 MessageForm
操作方法来渲染 View )将无法正确渲染,因此:
<% Html.RenderAction<MessageController>(m => m.MessageForm()); %>
将呈现在:
<form id="messageCreateForm" method="post" action="">
请注意,该操作为空。
这是使用 RenderAction
帮助器的正确方法吗?在这种情况下使用它是否正确?
更新: 实际上,将部分 View 重命名为 _MessageForm 可以正确渲染表单。
最佳答案
非常老的一个,但它跳进了我未回答的问题列表中:)
RenderAction 和 RenderPartial 之间有很大的区别。 RenderPartial
将在同一 Controller (或共享 Controller )上渲染 View
,而 RenderAction
实际上将执行MVC 的整个周期,即:它将实例化 Controller (您提到的任何 Controller ,而不仅仅是当前的 Controller ),它将执行操作,然后返回并渲染结果。
RenderPartial
更类似于包含
,如果您不指定不同的模型,它甚至会共享相同的模型。
RenderAction
要复杂得多(并且可能会产生不需要的副作用,这就是为什么他们从版本 1 开始就没有提供此功能 - 最初它是作为实验性功能提供的)。
因此,就您而言,如果您有小部件,则可以同时使用两者。这取决于小部件的复杂性。如果您必须从数据库获取数据、执行一些复杂的操作等...那么您可能应该使用 RenderAction。
我有一个负责新闻对象的新闻 Controller 。我创建了一个 block 操作,它将呈现一个包含要放入主页的最新新闻的 block 。在我看来,这是 RenderAction 的一个完美示例。
关于asp.net-mvc - 渲染 Action 渲染部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/719027/