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();

 }

}

以下是执行过程比较图

Html.RenderPartial与 Html.RenderAction的区别

一个示例:
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");}

 

你可能感兴趣的:(action)