2012-07-21 58 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(); 
    } 
}