@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction區別 .

來源:互聯網
上載者:User

標籤:blog   io   ar   os   使用   sp   for   strong   檔案   

mvc renderaction   renderpartial  雜談 

    Html.RenderPartial與Html.RenderAction這兩個方法都是用來在介面上嵌入使用者控制項的。

     Html.RenderPartial是直接將使用者控制項嵌入到介面上:

    <%Html.RenderPartial("LogOnUserControl");%>

    <%Html.RenderPartial("~/Areas/Comm/Views/Shared/LogOnUserControl.ascx");%>

注意:用第一種方法時,使用者控制項必須放在調用者同一目錄下,也可以放在View/Shared中。

 

    Html.RenderAction則通過Controller中的Action來調用使用者控制項

Controller:----使用者控制項所在Controller

    public ActionResult UserControl()
    {
        return PartialView();
    }

View:----調用使用者控制項的View

    <%Html.RenderAction("UserControl","Controller");%>

個人比較喜歡用RenderPartial

 

RenderPartial和RenderAction都是在Asp.net Mvc中用來顯示PartialView的方法,所以在什麼時候用哪個方法就是碰到的第一個問題。而要做出正確的選擇就需要對這兩個都有充分的瞭解,並且 知道其異同點。這也是本文的主題。What is Html.RenderPartial

Html.RenderPartial在Asp.net Mvc中是用來調用PartialView的。PartialView基本上就是Asp.net Webform中的UserControl。調用也很簡單,只要在View中把PartialView的名字作為參數傳遞就可以。比如:

<% Html.RenderPartial("YourPartialView", YourData); %>

YourData是一個可選的參數。如果有,那麼YourData會被賦給PartialView中的Model。如果沒有,那麼調用 RenderPartial的View中的Mode和ViewData會被傳遞給PartialView。也就是說,PartialView的資料來自於 調用的View。

What is Html.RenderAction

Html.RenderAction允許你直接調用某一個Action,並把返回的結果直接顯示在當前調用的View中。比如:

<% Html.RenderAction("Show", "Tag"); %>

此時,TagController中的Show方法會被調用。由於這時調用的是一個Action方法,因此可以在此方法中完成你想要完成的各種操作,比如從資料庫,檔案等擷取資料,寫資料等並返回結果。

[OutputCache(Duration=6000)]public ActionResult Show(){    var tagData = null;    //Get data from database    //tagData = tagService.AllHot();    return PartialView("TagCloud", tagData);}

TagCloud是一個簡單的PartialView檔案而已。

兩者的相同點

RenderPartial和RenderAction通常都被用來顯示一個功能相對獨立的“塊”,比如說顯示菜單或者導航條。 兩者輸出的結果都被作為調用的View的一部分顯示。

兩者的不同點
  1. RenderPatial的資料來自於調用的View,而RenderPatial來自自己。
  2. RenderAction會發起一個新的Request,而RenderPatial不會。
如何選擇

根據兩者不同點中的第二點,由於RenderAction會調用一個新的Action方法,而Asp.net Mvc中Action是最小的緩衝單位,因此如果某一個“塊”的資料比較固定,不會因為訪問者的不同而發生變化,那麼這時就是使用 RenderAction的時候了。 題外話,對於RenderAction會發起一個新的Request,感覺對調用頁面的流程有點破壞。一個View在顯示的時候,自己又發起一個 Request去擷取資料來顯示,顯然有點破壞了作為一個View的原則:

A View should only know how to render, but not what to render!
ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction區別 對這四個的區別做一個總結,清理一下思路,方便以後使用:

1、帶有Render的方法    @Html.Partial 對應 @{Html.RenderPartial(....);}
    @Html.Action 對應 @{Html.RenderAction(....);}

2、Action、RenderAction載入方法的視圖,執行3.  Html.Partial可以直接提供使用者控制項名作為參數,而Html.Action需要有對應的Action,在Action內部返回PartailResult(即retun PartialView())。

4、對於簡單的沒有任何邏輯的使用者控制項,推薦使用Html.Partial;對於需要設定一些Model的使用者控制項,推薦使用Html.Action。當然,有Model資料也是可以使用Html.Partial方法的,可以看方法的重載。

5、使用Html.Action有個好處,就是可以根據不同的情境選擇不同的使用者控制項。比如:
@Html.Action("UserInfoControl")
在對應的UserInfoControl這個Action中,在使用者未登入的時候,可以retun PartialView("LogOnUserControl");登入後,可以retun PartialView("UserInfoControl");

@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction區別 .(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.