Как динамически изменить главную страницу главной страницы?

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

ОБНОВЛЕНИЕ: я попал на полпути, пройдя через PreInit оказывается, что вы можете делать такие вещи, как base.Master.MasterPageFile = "/master.Master";, но по какой-то причине это не загружает материал в заголовке самой главной главной страницы, а именно таблицы стилей.

4 ответа

Решение

Цитата из: Могу ли я динамически изменить мастер вложенной главной страницы?

Только что проверил это, и он работает из PreInit страницы, которая использует вложенную MasterPage. защищенный void Page_PreInit(отправитель объекта, EventArgs e)
{
this.Master.MasterPageFile = "/Site2.Master";
}

Очевидно, что вам нужно убедиться, что ContentPlaceholderIds одинаковы для всех страниц, между которыми вы меняетесь.

Если вы переопределите MasterPageClass и добавите свой собственный onPreInit, вы можете это сделать, но я не думаю, что это сработает. Согласно Reflector, для него определенно нет никакой конструкции, даже нечего переопределять, хотя, поскольку он наследует UserControl, всегда есть OnInit ... альтернативно, вы можете попытаться переопределить get_Master(), но это также может не сработать...

Допустим, вы хотите использовать другую главную страницу без меню, передайте строку запроса NoMenu.

protected void Page_PreInit(object sender, EventArgs e)
 {
   //You'll go through infinite loop if you do not check if we already have the new master page, this will switch to different master page if requested without a menu for example
   if (Request.QueryString["NoMenu"] != null && this.MasterPageFile != "/MasterPageNoMenu.master")
    {
        this.MasterPageFile = "/MasterPageNoMenu.master";

        base.OnPreInit(e); 
    }
} 

Используйте конструктор главной страницы.

Другие вопросы по тегам