Ответов (4)4
Просто протестировал это, и он работает с PreInit страницы, которая использует вложенную MasterPage.
protected void Page_PreInit(object sender, EventArgs e)
{
this.Master.MasterPageFile = "/Site2.Master";
}
Очевидно, вам нужно будет убедиться, что ContentPlaceholderIds согласованы на всех страницах, между которыми вы переключаетесь.
Мы объединяем метод Энди с классом «BasePage» - мы создаем класс, который наследуется от System.Web.UI.Page, а затем все наши страницы наследуются от этого класса.
Затем в нашем классе базовой страницы мы можем выполнить соответствующие проверки, чтобы увидеть, какую корневую главную страницу следует использовать - в нашем случае у нас есть мастер «Презентация» и мастер «Создание» - версия презентации имеет всю навигацию и мебель страницы, наряду с тяжелым отображением CSS, в то время как у мастера разработки есть дополнительный JS для инструментов создания, более легкий CSS и нет навигации (это то, что мы используем, когда пользователь фактически создает страницу, а не изменяет макет сайта).
Затем эта базовая страница может вызвать Page.Master.MasterPageFile и установить для него мастер разработки, если это правильное состояние для страницы.
На всякий случай, если кто-то наткнется на это и вырвет себе волосы с ошибкой Элементы управления содержимым должны быть элементами управления верхнего уровня на странице содержимого или вложенной главной странице, которая ссылается на главную страницу » при попытке кода Энди, избавьтесь от ошибки this.Master
. Итак, код становится:
protected void Page_PreInit(object sender, EventArgs e)
{
MasterPageFile = "/Site2.Master";
}
Изменить Как указывает Жаф ниже, код, который у меня есть ^^, изменит только мастер текущей страницы, но не мастер мастера. Это код, о котором говорил Хейнси, когда упомянул, что мы все знаем о динамическом изменении главной страницы » (чего я не знал, ооо ). Если вы случайно попали на эту страницу, набрав " главную страницу изменения stackoverflow " (что я и сделал), то, возможно, это именно тот код, который вы ищете :-)
Чтобы добавить к ответу Zhaph - Ben Duguid, (+1 между прочим):
Вот пример кода, который устанавливает главную страницу вложенной главной страницы. Все страницы наследуются от этого BasePage, поэтому этот код существует только в одном месте.
public class BasePage : System.Web.UI.Page
{
private void Page_PreInit(object sender, System.EventArgs e)
{
if (Request.Browser.IsMobileDevice)
{
if (Page.MasterPageFile == "~/master/nested.master"))
{
Page.Master.MasterPageFile = "~/master/mobile.master";
}
else
{
MasterPageFile = "~/master/mobile.master";
}
}
}
}