2012-07-21 84 views
2

有沒有什麼辦法可以指定整個控制器來使用特定的佈局?我知道你可以在ViewStart中分配佈局,無論如何viewStart知道正在使用哪個控制器?指定整個控制器的佈局

我的目標是有兩個管理佈局,其中一個帶有額外的導航欄,當您使用管理控制器中的任何內容時。

回答

2

你可以寫一個自定義的行爲過濾:

public class LayoutAttribute : ActionFilterAttribute 
{ 
    private readonly string _layout; 
    public LayoutAttribute(string layout) 
    { 
     _layout = layout; 
    } 

    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     var result = filterContext.Result as ViewResult; 
     if (result != null) 
     { 
      result.MasterName = _layout; 
     } 
    } 
} 

,然後裝飾與它的控制器和withing該控制器將使用您所指定的佈局中的所有動作(返回查看結果很明顯):

[Layout("_SimpleLayout")] 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
}