电竞比分网-中国电竞赛事及体育赛事平台

分享

如何選擇Html.RenderPartial和Html.RenderAction

 aaie_ 2016-04-01
    

 Html.RenderPartial與Html.RenderAction這兩個(gè)方法都是用來(lái)在界面上嵌入用戶(hù)控件的。

 

     Html.RenderPartial是直接將用戶(hù)控件嵌入到界面上:

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

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

注意:用第一種方法時(shí),用戶(hù)控件必須放在調(diào)用者同一目錄下,也可以放在View/Shared中。

 

    Html.RenderAction則通過(guò)Controller中的Action來(lái)調(diào)用用戶(hù)控件

Controller:----用戶(hù)控件所在Controller

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

View:----調(diào)用用戶(hù)控件的View

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

     
      RenderPartialRenderAction都是在Asp.net Mvc中用來(lái)顯示PartialView的方法,所以在什么時(shí)候用哪個(gè)方法就是碰到的第一個(gè)問(wèn)題。而要做出正確的選擇就需要對(duì)這兩個(gè)都有充分的了解,并且 知道其異同點(diǎn)。這也是本文的主題。

What is Html.RenderPartial

Html.RenderPartial在Asp.net Mvc中是用來(lái)調(diào)用PartialView的。PartialView基本上就是Asp.net Webform中的UserControl。調(diào)用也很簡(jiǎn)單,只要在View中把PartialView的名字作為參數(shù)傳遞就可以。比如:

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

YourData是一個(gè)可選的參數(shù)。如果有,那么YourData會(huì)被賦給PartialView中的Model。如果沒(méi)有,那么調(diào)用 RenderPartial的View中的Mode和ViewData會(huì)被傳遞給PartialView。也就是說(shuō),PartialView的數(shù)據(jù)來(lái)自于 調(diào)用的View。

What is Html.RenderAction

Html.RenderAction允許你直接調(diào)用某一個(gè)Action,并把返回的結(jié)果直接顯示在當(dāng)前調(diào)用的View中。比如:

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

此時(shí),TagController中的Show方法會(huì)被調(diào)用。由于這時(shí)調(diào)用的是一個(gè)Action方法,因此可以在此方法中完成你想要完成的各種操作,比如從數(shù)據(jù)庫(kù),文件等獲取數(shù)據(jù),寫(xiě)數(shù)據(jù)等并返回結(jié)果。

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

TagCloud是一個(gè)簡(jiǎn)單的PartialView文件而已。

兩者的相同點(diǎn)

RenderPartial和RenderAction通常都被用來(lái)顯示一個(gè)功能相對(duì)獨(dú)立的“塊”,比如說(shuō)顯示菜單或者導(dǎo)航條。 兩者輸出的結(jié)果都被作為調(diào)用的View的一部分顯示。

兩者的不同點(diǎn)

  1. RenderPatial的數(shù)據(jù)來(lái)自于調(diào)用的View,而RenderAction來(lái)自自己。
  2. RenderAction會(huì)發(fā)起一個(gè)新的Request,而RenderPatial不會(huì)。

如何選擇

根據(jù)兩者不同點(diǎn)中的第二點(diǎn),由于RenderAction會(huì)調(diào)用一個(gè)新的Action方法,而Asp.net Mvc中Action是最小的緩存單位,因此如果某一個(gè)“塊”的數(shù)據(jù)比較固定,不會(huì)因?yàn)樵L問(wèn)者的不同而發(fā)生變化,那么這時(shí)就是使用 RenderAction的時(shí)候了。 題外話(huà),對(duì)于RenderAction會(huì)發(fā)起一個(gè)新的Request,感覺(jué)對(duì)調(diào)用頁(yè)面的流程有點(diǎn)破壞。一個(gè)View在顯示的時(shí)候,自己又發(fā)起一個(gè) Request去獲取數(shù)據(jù)來(lái)顯示,顯然有點(diǎn)破壞了作為一個(gè)View的原則:

A View should only know how to render, but not what to render!

結(jié)束了, This is all.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多