Html.Action和Html.RenderAction
Action是執行單獨的控制器操作並顯示結果,Action提供了更多的靈活性和重用性,因為控制器操作可以建立不用的模型,可以利用單獨的控制器上下文,他們兩個僅有的不同是:RenderAction可以直接寫入響應流。下面看一下代碼:
public class MyController
{
public ActionResult Index()
{
return View();
}
[ChildActionOnly]
public ActionResult Menu()
{
var menu=GetMenuFromSomewhere();
return PartialView(menu);
}
}
Menu操作構建一個菜單模型並返回一個帶有菜單的分布視圖
@model Menu
<ul>
@foreach(var item in Model.MenuItem)
{
<li>@item</li>
}
</ul>
在Index.cshtml視圖中,可以調用Menu操作來顯示菜單
<html>
<head></head>
<body>
@Html.Action("Menu")
</body>
</html>
注意Menu操作使用了ChildActionOnlyAttribute特性來標記,這個特性設置防止了運行時直接通過一個URL來調用Menu操作,相反,只能通過Action或RenderAction來調用這個操作。
在ASP.NET MVC3中,在ControllerContext上也有一個稱為IsChildAction的新屬性,當通過Action或RenderAction方法調用操作時,它的值就為True,當通過一個URL調用時,它的值為false。
查看本欄目