2015-12-02 68 views
0

在MVC 5.1 Web应用程序项目中,我有一个专用于该项目的Facebook画布应用程序的控制器。我需要控制器返回的所有视图都具有特定的布局。 (通常,我不会在控制器中定义布局属性,因为它在View上有太多的说法,但在这种情况下,我愿意让控制器指定它,因为它全部关于facebook画布)。在OnActionExecuted中为视图定义布局

我可以通过返回

return View("View", "~/Views/Shared/_FacbookCanvasLayout.cshtml"); 

实现这一点,但在这种情况下,我不得不用这个每一个视图。我想要的是改写基本控制器类中的OnActionExecuted方法并在其中定义布局。

所以我的问题是,我怎样才能在OnActionExecuted类中定义视图的布局 - 或者如果有更好的解决方案,我该怎么做?

+0

为什么不创建该控制器特定的布局视图,然后为每个在方法的观点使用@ { 布局=“〜/查看/共享/ _FacbookCanvasLayout.cshtml”} –

+0

@ŁukaszTrzewik:相同原因,我不想多次从控制器返回,我想消除冗余。 –

回答

1

那么这样做呢?

protected override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     base.OnActionExecuted(filterContext); 
     var res = filterContext.Result as ViewResult; 
     if (res != null) 
      res.MasterName = "~/Views/Shared/_FacbookCanvasLayout.cshtml"; 
    } 
+1

正是我在找的,谢谢。 –