6 мая 2011 г.

Изменение Master Page для представления из контроллера, в ASP.Net MVC

В предыдущем посте я писал о том, что иногда приходится использовать вложенные мастер-страницы, или просто несколько главных мастер-страниц. Как мы уже знаем, при создании представления, нужно указать, наследуется ли оно от какой либо, конкретной Master Page. Но оказывается, что принадлежность к мастеру, можно менять из контроллера.
Для чего это нужно?
Ну, например, у нас есть Site.Master, с вложенными в него User.Master и Admin.Master. Далее, у нас имеется какая-то одна страничка (представление), которая используется и юзером и админом, и должна отображаться через оба последних мастера по требованию.

Все происходит довольно просто.
Для начала, при создании представления, в качестве MasterPage можно указать любую из страниц шаблонов. А дальше, все происходит в методе контроллера:

public ActionResult ItemsList(int? id)
{
MyModel model = new MyModel();    
//........
// Заполнение модели
//........

ViewResult result = View(model);

if (id != null)
result.MasterName = "Admin";
else
result.MasterName = "User";

return result;
}

Все просто. В зависимости от принятого параметра, мы подставляем нужный MasterPage в представление. Тоесть, всегда отрабатывает один и тот же метод контроллера, который, по-ходу дела, при необходимости изменяет MasterPage представления.

Это все.