Html.RenderPartial與Html.RenderAction 這個兩個方法都是用於把MVC用戶控件嵌入到View中。
Html.RenderPartial是直接將MVC用戶控件嵌入到界面上
@{Html.RenderPartial("SupplierList ");}
注意: MVC用戶控件必須放在調用者同一目錄下,也可以放在View/Shared中。
@Html.RenderPartial("~/Views/ Supplier/SupplierList.ascx");
指明MVC用戶控件所放的具體目錄。Html.RenderAction是通過Controller中的Action來調用MVC用戶控件
在MVC 2.0中,新增加了Html.RenderAction();這個方法RenderPartial有點不一樣,他是直接重新執行一次Controller → Model → View的順序,然后把產生的頁面帶回到原來的View中再回傳。
所以Html.RenderAction中傳遞的參數是執行的Controller和Action名稱。若是在控制器中的某個方法只能讓Html.RenderAction()調用時,可以在方法上添加特性[ChildActionOnly],其它的地方無法訪問。
public class ChildActionOnlyTestController : Controller { [ChildActionOnly] public ActionResult GetSupplierList() { var controller = new SupplierController(); return controller.SupplierList(); } }
以下是執行過程比較圖
一個示例:
Controller:
//文章菜單列表 [ChildActionOnly] public ActionResult ArticleMenu() { var item = _db.Classes.ToList(); return PartialView(item); }
View:Articlemenu.cshtml
@model IEnumerable<Class> @foreach (var item in Model) { @Html.ActionLink(item.ClassName,item.ActionName, "Article", null, new { @class = "tree_children", @target = "MainFrame" }) }
Add View:Index.cshtml
@{Html.RenderAction("ArticleMenu", "Article");}
第二個示例:
Controller: 注意PartialView里加載的是部分視圖並不是model
[ChildActionOnly] public ActionResult CartSummary() { var cart = ShoppingCart.GetCart(this.HttpContext); ViewData["CartCount"] = cart.GetCount(); return PartialView("CartSummary"); }
PartiaView:CartSummary.cshtml
@Html.ActionLink("Cart (" + ViewData["CartCount"] + ")", "Index", "ShoppingCart", new { id = "cart-status" })
Add View:
@{Html.RenderAction("GenreMenu", "Store");}