Установка Ведущего устройства ASP.NET Page во времени выполнения

8
задан Jason Bunting 28 August 2008 в 21:30
поделиться

5 ответов

Я сделал это однажды, я сделал точно, что Вы описали (Сделанный всеми страницами наследоваться пользовательской странице с событием OnPreInit). Также у меня был пользовательский Application_PreRequestHandlerExecute в моем Global.asax.cs для установки Page. StyleSheetTheme для того, чтобы сделать изменения изображения/CSS, которые не потребовали другого Ведущего устройства Page.

6
ответ дан 5 December 2019 в 15:29
поделиться

Вместо двух различных основных страниц как насчет того, чтобы иметь одно ведущее устройство, которое динамично загружает различные пользовательские элементы управления и содержание литералы HTML?

2
ответ дан 5 December 2019 в 15:29
поделиться

Достаточно легко обработать PreInit и вставить одну строку кода, которую требуется для загрузки надлежащего Ведущего устройства Page.

this.Page.MasterPageFile = "~/default.master";

В отсутствие некоторого неопровержимого довода, чтобы не пойти этим путем, это - то, что я сделал бы, независимо от того, где Вы обрабатываете PreInit.

1
ответ дан 5 December 2019 в 15:29
поделиться

Я чувствую Вашу боль. Я искал приблизительно час (если не больше) для проблемы к этому без успеха. Это не просто сокращение, и сухой ответ для высказывания "просто называют его от 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
2
ответ дан 5 December 2019 в 15:29
поделиться

Мне любопытно, что решает, как страница должна посмотреть? Действительно ли это - пользователь, нажимающий кнопку для изменения темы? Основан на этом 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>
0
ответ дан 5 December 2019 в 15:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: