天天看點

如何選擇Html.RenderPartial和Html.RenderAction

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和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檔案而已。

兩者的相同點

兩者的不同點

  1. RenderPatial的資料來自于調用的View,而RenderAction來自自己。
  2. RenderAction會發起一個新的Request,而RenderPatial不會。

如何選擇

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