2008-10-20 2 views
3

При использовании WebForms соответствующее место, чтобы назначить мастер-страницы на страницу динамически кажется страницы PreInit событие:Динамически назначая мастер-страниц с использованием MVC

this.Master.MasterPageFile = "~/leaf.Master" 

Если nessasary, мастер-страницы в иерархии вложенных мастер-страниц может быть установлены здесь:

this.Master.MasterPageFile = "~/leaf.Master" 
this.Master.Master.MasterPageFile = "~/root.Master" 

использования фреймворки можно задать одно имя главной страницы динамически с помощью контроллеров Vi метод, передавая masterName, но как установить другой мастер-страницу часа в иерархии?

Обновление
Извините, но я не был чист.

По иерархии я подразумеваю цепочку вложенных мастер-страниц, так как я могу установить самую верхнюю главную страницу в цепочке вложенных мастер-страниц?

Например, у нас есть такая настройка, что разные типы клиентов имеют разные мастер-страницы и вложенные в эту главную страницу являются дополнительной главной страницей для определенных пользовательских ролей. Нам необходимо динамически установить корневой клиентский мастер, а также мастер роли.

ответ

3

Не совсем понятно, что вы подразумеваете под «выше в иерархии», но если вы имеете в виду «в одном месте, а не в каждом контроллере, который я создаю», я могу представить два варианта:

  1. Создайте абстрактный суперконтроллер и подкласс ваших конкретных контроллеров.

  2. Create a controller factory (подкласс DefaultControllerFactory) и переопределить CreateController для установки собственного свойства MasterPage.

Если вы выбрали последний вариант, вам нужно сделать это в Global.asax:

ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory()); 
+0

Контроллеры не устанавливают мастер-страницы напрямую, так как они никогда не имеют прямого доступа к представлению. – 2008-10-20 16:00:45

1

Там нет возможности для этого в MVC сегодня.

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