【轉】Html.RenderPartial與 Html.RenderAction的區別


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");}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM