代码之家  ›  专栏  ›  技术社区  ›  Brian

渲染渲染部分

  •  47
  • Brian  · 技术社区  · 17 年前

    据我所知,两者之间有很大的区别 Html.RenderPartial 包含在ASP.NET MVC发行版和 HTML.RenderAction 在 Microsoft.Web.Mvc.ViewExtensions 包括在MVC期货中。

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

    在我看来,使用 RenderAction 方法,因为每个小部件都有一个专用的控制器,负责获取不同的数据并呈现专用的视图(而不是只有一个控制器和一个唯一的视图模型来传递) RenderPartial 用于渲染视图的辅助对象)。

    通过测试,我得到了一个指向控制器中创建操作方法的表单,如:

     <% using (Html.BeginForm("Create", "Message", FormMethod.Post, 
         new { id = "messageCreateForm" })) {%>
    

    并称之为

     <% Html.RenderPartial("MessageForm",new MessageDTO()); %>
    

    将正确呈现一个:

    <form id="messageCreateForm" method="post" action="/Message/Create">
    

    但与 (因此,使用 MessageForm 控制器上用于渲染视图的操作方法)不会正确渲染,因此:

     <% Html.RenderAction<MessageController>(m => m.MessageForm()); %>
    

    将呈现在:

    <form id="messageCreateForm" method="post" action="">
    

    这是正确的使用方法吗 渲染 在这种情况下使用它正确吗?

    2 回复  |  直到 12 年前
        1
  •  81
  •   Amir Ismail    14 年前

    非常老的一个,但它跳进了我的未回答问题列表:)

    两者之间有很大的区别 RenderAction 和 RenderPartial . 渲染部分 View 在同一控制器(或共享控制器)上 渲染 将实际执行整个MVC循环,即:它将实例化控制器(您提到的任何控制器,而不仅仅是当前控制器),它将执行操作,然后返回并呈现结果。

    这个 渲染部分 更类似于 inclusion ,如果不指定不同的模型,它甚至会共享同一个模型。

    这个 渲染 要复杂得多(可能会有不希望的副作用,这就是为什么他们从版本1开始就没有提供这个功能——最初它是作为一个实验特性提供的)。

    因此,在您的情况下,如果您有小部件,那么两者都可以使用。这取决于小部件的复杂性。如果您有一个必须从数据库获取数据的数据库,请执行一些复杂的操作,等等。。。那么你可能应该使用 渲染 .

    我有一个负责新闻对象的新闻控制器。我创建了一个Block动作,它将呈现一个包含最新新闻的Block,并将其放在主页上。在我看来,这是一个完美的渲染示例。

        2
  •  1
  •   Scrimothy    13 年前

    与MVC合作需要非常注意不要射中自己的脚。我指的是MVC产品的效率。在复杂的项目中,我更喜欢使用RenderPartial而不是RenderAction。我使用RenderPartial,其中使用jQuery.ajax请求(带有Html.Action)。它肯定比渲染更有效。通过这种方式,您可以将视图放入缓存,然后调用jQuery.ajax。你们自己试试看。 Ayende在文章中清楚地解释了这一点 Hibernating Rhinos