Как динамически изменить главную страницу главной страницы?
Я пытаюсь изменить главную страницу динамически, и хотя это легко сделать со страницы содержимого (переопределение 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);
}
}