Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
899
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
952
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
942
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1727
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6088
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4400
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Установка главной страницы ASP.NET во время выполнения
Я работаю над сайтом, который должен поддерживать два или более вида, изменяемых во время выполнения. Я надеялся, что смогу справиться с изменением с помощью переключателя CSS, но, похоже, мне придется использовать другую мастер-страницу для каждого дизайна.
Итак, как лучше всего установить мастер-страницу во время выполнения? Page.MasterPageFile можно задать только в событии Page.OnPreInit. Похоже, что решения состоят в том, чтобы сделать все мои страницы наследуемыми от общей базы, которая обрабатывает событие PreInit, или использовать HttpModule, который это делает.
Какой-нибудь совет?
Я уже делал это однажды, я сделал именно то, что вы описали (сделал все страницы наследуемыми от пользовательской страницы с событием OnPreInit). Кроме того, у меня был пользовательский Application_PreRequestHandlerExecute в моем Global.asax.cs для настройки Page.StyleSheetTheme для выполнения изменений изображения/css, которые не требовали другой главной страницы.
Я чувствую твою боль. Я искал около часа (если не больше) для этого вопроса, но безуспешно. Это не просто резкий и сухой ответ, чтобы сказать "just call it from PreInit on each page", когда у вас есть сотни страниц. Но потом я понял, что трачу больше времени на поиски решения, чем потребовалось бы, чтобы просто сделать это на каждой странице.
Однако я хотел установить MasterPageFile на основе свойства профиля, так что это было бы около 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
Достаточно просто обработать PreInit и вставить одну строку кода, необходимую для загрузки соответствующей главной страницы.
this.Page.MasterPageFile = "~/default.master";
В отсутствие какой-либо убедительной причины не идти этим путем, это то, что я бы сделал, независимо от того, где вы управляете PreInit.
Мне интересно, что решает, как должна выглядеть страница? Это пользователь нажимает кнопку, чтобы изменить тему? Это основано на URL, который был использован, чтобы добраться до сайта?
Код позади поддерживается на главных страницах, поэтому вы можете поместить некоторую логику в одну главную страницу, чтобы решить, что должно отображаться.
Я видел несколько сайтов, устанавливающих файлы cookie на основе кликов пользователя (для изменения размера шрифта или ширины страницы), а затем применяющих различные файлы CSS на основе значения этих файлов cookie. Если куки-файл отсутствует, отобразите внешний вид по умолчанию.
EDIT:
Еще одна мысль здесь, Если вы просто пытаетесь переключить CSS, заключается в том, чтобы установить свой тег стиля для запуска на сервере и назначить ему свойства во время выполнения. Опять же, это потребует использования одной главной страницы и размещения кода в коде главной страницы, вероятно, в обработчике событий PreInit.
Поскольку я никогда не реализовывал это решение, я не уверен, должен ли весь тег <HEAD> работать на сервере или нет.
<html>
<head id="Head" runat="server">
<style id="StylePlaceholder" runat="server" type="text/css"></style>
</head>