2010-09-22 2 views
4

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

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

ответ

3

Цитирование от: Can I change a nested master page's master dynamically?

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

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

+0

Хе-хе, смешно, я обнаружил это сам путем проб и ошибок, но, как я уже говорил, это не совсем решает проблему. Файл главной страницы загружается, однако таблицы стилей, которые находятся в заголовке, не являются. – Shagglez

+0

Ваша главная страница в другой папке, чем страницы содержания? – Kamyar

+0

Если это так, ваша проблема связана с неправильной настройкой путей во время выполнения на главной странице. некоторые обходные решения упоминаются в: http://forums.asp.net/t/1401917.aspx – Kamyar

1

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

+0

Да, это то, что нельзя переопределить. OnInit() встречается слишком поздно на жизненном цикле, так что это бесполезно. Что такое get_Master()? – Shagglez

+1

это внутренний метод, вызываемый страницей, но если вы используете RedGate Reflector, тогда вы его увидите ... Я настоятельно рекомендую вам начать использовать Reflector, если вы еще этого не сделали, это поможет объяснить многое о .NET. код, который вы используете ... – jcolebrand

0

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

+1

Делает смысл и работает. Мне пришлось удалить атрибут MasterPageFile вложенной мастер-страницы, прежде чем он сработает. Все равно приветствует. – kallotec

+0

@klingdigital Я не знаю, почему мой ответ неверен. – regisbsb

0

Предположим, вы хотите использовать другую главную страницу без меню, передать строку запроса 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); 
    } 
} 
+0

Добро пожаловать в Stackoverflow!В ответе рекомендуется объяснить, почему работает ответ. –

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