指定整个控制器的布局
问题描述:
有没有什么办法可以指定整个控制器来使用特定的布局?我知道你可以在ViewStart中分配布局,无论如何viewStart知道正在使用哪个控制器?指定整个控制器的布局
我的目标是有两个管理布局,其中一个带有额外的导航栏,当您使用管理控制器中的任何内容时。
答
你可以写一个自定义的行为过滤:
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();
}
}