Я сделал это однажды, я сделал точно, что Вы описали (Сделанный всеми страницами наследоваться пользовательской странице с событием OnPreInit). Также у меня был пользовательский Application_PreRequestHandlerExecute в моем Global.asax.cs для установки Page. StyleSheetTheme для того, чтобы сделать изменения изображения/CSS, которые не потребовали другого Ведущего устройства Page.
Вместо двух различных основных страниц как насчет того, чтобы иметь одно ведущее устройство, которое динамично загружает различные пользовательские элементы управления и содержание литералы HTML?
Достаточно легко обработать PreInit и вставить одну строку кода, которую требуется для загрузки надлежащего Ведущего устройства Page.
this.Page.MasterPageFile = "~/default.master";
В отсутствие некоторого неопровержимого довода, чтобы не пойти этим путем, это - то, что я сделал бы, независимо от того, где Вы обрабатываете PreInit.
Я чувствую Вашу боль. Я искал приблизительно час (если не больше) для проблемы к этому без успеха. Это не просто сокращение, и сухой ответ для высказывания "просто называют его от PreInit на каждой странице", когда у Вас есть сотни страниц. Но затем я понял, что проводил больше времени, ища решение, чем оно возьмет, чтобы просто сделать это на каждой странице.
Однако я хотел установить MasterPageFile на основе свойства Profile, так, чтобы были приблизительно 5 строк кода каждая страница, кошмар пригодности для обслуживания. И так или иначе, "не повторяют себя", право?
Таким образом, я создал Дополнительный метод в модуле в папке App_Code для создания этого легче и более удобным в сопровождении.
Public Module WebFunctions
<System.Runtime.CompilerServices.Extension()> _
Public Sub SetMaster(ByVal page As Page)
Dim pb As ProfileCommon = DirectCast(HttpContext.Current.Profile, ProfileCommon)
If pb IsNot Nothing Then
page.MasterPageFile = pb.MasterPage
End If
End Sub
End Module
И затем на PreInit каждой страницы, я просто называю это:
Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit
Me.SetMaster()
End Sub
Мне любопытно, что решает, как страница должна посмотреть? Действительно ли это - пользователь, нажимающий кнопку для изменения темы? Основан на этом URL, который использовался для получения до сайта?
Код позади поддерживается на Основных Страницах, таким образом, Вы могли поместить некоторую логику в свое одно Ведущее устройство Page для решения то, что должно быть отображено.
Я видел несколько cookie набора сайтов на основе пользовательских щелчков (для изменения размера шрифта или страницы width), и затем применил различные файлы CSS на основе значения тех cookie. Если никакой cookie не присутствует, отобразите стиль по умолчанию.
Править:
Другая мысль здесь, если Вы просто пытаетесь выключить CSS, состоит в том, чтобы установить Ваш тег style, чтобы работать в сервере и присвоить свойства ему во времени выполнения. Еще раз это потребовало бы использования единственной основной страницы, и помещающий код код - позади основной страницы, вероятно, в обработчике событий PreInit.
Так как я никогда не реализовывал это решение, я не уверен, должен ли целый <ГЛАВНЫЙ> тег работать в сервере или нет.
<html>
<head id="Head" runat="server">
<style id="StylePlaceholder" runat="server" type="text/css"></style>
</head>