2015-12-02 1 views
0

В проекте веб-приложения MVC 5.1 у меня есть контроллер, предназначенный для приложения Canvas на Facebook. Мне нужно, чтобы все представления, возвращаемые контроллером, имели определенный макет. (Обычно я не определял бы свойство Layout в контроллере, потому что было бы слишком много, чтобы сказать в представлении, но в этом случае я готов позволить контроллеру диктовать это, поскольку это все о холсте facebook).Определение макета для представления в OnActionExecuted

я могу добиться этого путем возвращения

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

, но в этом случае я должен был бы использовать это для каждого отдельного вида. Вместо этого я должен переопределить метод OnActionExecuted в классе базового контроллера и определить его расположение.

Итак, мой вопрос в том, как определить макет для представления в классе OnActionExecuted - или если для этого есть лучшее решение, как я могу это сделать?

+0

Почему бы не создать этот контроллер конкретный вид макета, а затем для каждого из видов в методах использовать @ { Layout = "~/Views/Shared/_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

Именно то, что я искал, спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^