asp.net-mvc - 渲染 Action 渲染部分

标签 asp.net-mvc

据我了解,ASP.NET MVC 版本中包含的 Html.RenderPartial 中的 HTML.RenderAction 之间存在很大差异。 Microsoft.Web.Mvc.ViewExtensions 包含在 MVC Futures 中。

在我的应用程序中,我有许多页面由许多“小部件”(某种程度上)组成,每个页面都有自己的特定功能。

在我看来,使用 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/

相关文章:

c# - 如何使用 web.config 将 url 重定向到另一个 url?

c# - 如何对其中包含属性的类列表集合进行排序?

c# - MVC Web 应用程序中的托管 WCF 服务

asp.net - 从 ASP.Net MVC 执行 Web 作业

c# - 如何使用 RedirectToAction 返回方法参数

c# - 在 ASP.NET MVC 中编辑订单详细信息

javascript - 从 Javascript 格式化文本

angularjs - 在 Angular 引导的 MVC 应用程序中有条件地呈现 MVC 包

javascript - 如何使用 JavaScript 或 jQuery 在 MVC4 中单击添加按钮时将数据插入表中?

c# - 从 blob 下载多个文件作为 Zip 文件夹