Html.partial和RenderPartial的用法與區別
Html.partial和RenderPartial都是輸出html片段,區別在於
Partial是將視圖內容直接生成一個字符串並返回(相當於有個轉義的過程),RenderPartial方法是直接輸出至當前 HttpContext(因為是直接輸出,所以性能好)。因此它們在視圖中的使用方式是不同的:
MVC2:
<%Html.RenderPartial("PartialView");%>輸出到 HttpContext
<%=Html.Partial("PartialView")%> 輸出為string 直接到頁面
MVC3:
@Html.Partial("BasicChart")
@{
Html.RenderPartial("BasicChart");
}
Html.partial和RenderPartial的其它三個重載很有用,第二個重載@{Html.RenderPartial("BasicChart",model);}
用這個重載可以在部分視圖里使用強類型,然后在主視圖中使用第二個參數傳model過去,而不用controller
比如從list中傳其中一項myClass過去
第三個重載用來傳ViewData同理,如:@{Html.RenderPartial("BasicChart",ViewData["myData"]);}
Partial 和RenderPartial:
這兩個的性質都是一樣, 只指把一個個View給鑲入進來, 只是回傳值有點不一樣
Partial 回傳的一個Object (MvcHtmlString), 回傳一個String 把一堆Html給回傳出來, 然后寫進到主頁面上
@Html.Partial("ViewName")
RenderPartial 回傳的是void, 而這個方法會在主頁面上添加指定的View
@{
Html.RenderPartial("ViewName");
}
這兩個方法沒有用到Controller, 是直接把一個View(Page) 給加進來
而RenderAction 有點不一樣, 這是一個Action, 所以會用到Controller 之后再回傳一個頁面
public class ChildActionOnlyTestController : Controller
{
[ChildActionOnly]
public ActionResult GetSupplierList()
{
var controller = new SupplierController();
return controller.SupplierList();
}
}
RenderPartial和RenderAction兩者的相同點
通常都被用來顯示一個功能相對獨立的“塊”,比如說顯示菜單或者導航條。 兩者輸出的結果都被作為調用的View的一部分顯示。
兩者的不同點
- RenderPatial的數據來自於調用的View,而RenderAction來自自己。
- RenderAction會發起一個新的Request,而RenderPatial不會。
PartialView:<div>Just a PartialView Test!@ViewBag.Test</div> @ViewBag.Test
View:<p> @{Html.RenderPartial("ViewUserControl1");} @Html.Partial("ViewUserControl1") @{Html.RenderAction("ViewUserControl1");} @Html.Action("ViewUserControl1") </p>
Controller:Controller: [ChildActionOnly]//防止直接調用 public ActionResult ViewUserControl1() { ViewBag.Test = "(Action)調用"; return PartialView(); }