powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как установить тему оформления на уровне MasterPage
21 сообщений из 21, страница 1 из 1
Как установить тему оформления на уровне MasterPage
    #38626901
olegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASP.NET, C#, WebForms

Ситуация такова... На сайте может быть несколько групп страниц. Каждая группа страниц имеет свой MasterPage.
Можно ли как-то определить на уровне MasterPage, какая тема оформления будет использоваться ?

Возможно я сумбурно изложил проблему, но.. как получилось. Ниже немного прокомментирую, о чем речь...

Для сайта создается файл скина MyTheme.skin (в моем случае их может быть несколько).

Я знаю как подключить конкретный скин к конкретной странице <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Theme="MyTheme" %>

Я знаю как подключить конкретный скин для всего сайта
<system.web>
<pages theme="MyTheme" />
<authentication mode="Windows"/>
</system.web>

А как это сделать через MasterPage для группы страниц... нифига не могу понять...

Пишу как умею. Дорого, долго...
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38626936
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegov, 1) создаем класс BaseMasterPage который будет служить базовым классом для master страниц
Код: c#
1.
2.
3.
4.
public class BaseMasterPage : MasterPage
{
	public string Theme { get; set; }
}


2) создаем класс BasePage который будет служить базовым классом для страниц
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class BasePage : Page
{
	public PageBase()
	{
		PreInit += OnPreInit;
	}

	private void OnPreInit(object sender, EventArgs e)
	{
		Theme = ((BaseMasterPage )Master).Theme;
	}
}


3) Создаем темы, страницы и master страницы. Для страниц меняем базовый класс на BasePage, для master страниц на BaseMasterPage

4) Указываем в @-директиве master страниц атрибут Theme с нужным значением.
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38626972
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у группы своя тема и своя мастер страница, то можно и так сделать:
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38626975
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обзываем тему и мастер-страницу именем группы и кладём в отдельную папку, например: App_MasterPages/MyGroup.master.

Как предложил bazil, создаем класс BasePage который будет служить базовым классом для страниц:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class BasePage : Page
{
    protected override void OnPreInit(EventArgs e)
    {
        MasterPageFile = String.Format( "~/App_MasterPages/{0}.master", Theme);

        base.OnPreInit(e);
    }
}



Хотя это получается с другого конца
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38626977
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.: почему кстати зачастую подписываются на событие PreInit += OnPreInit, вместо переопределения метода?
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38627079
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, мне это кажется более логичным когда класс преднаназчен для наследования т.к. дает возможность сделать обработчик private.
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38627086
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileskyANA, мне это кажется более логичным когда класс преднаназчен для наследования т.к. дает возможность сделать обработчик private.Ну получим не protected, а private, а толку?

Наследник по прежнему может вызвать метод, если он вызовет метод, то будет инициализировано событие и выполнится код обработчика.

Если же наследник переопределит метод так, что в нём не будет base.OnPreInit(e), то не будет вызываться ни мой код, ни Ваш, т.к. не будет событие инициализироваться.
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38627095
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAP.S.: почему кстати зачастую подписываются на событие PreInit += OnPreInit, вместо переопределения метода?

на события подписываются вместо переопределения метода для снижения связности
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38627137
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНу получим не protected, а private, а толку?
Толк в том что этот метод не будет виден наследнику. В любом случае он не предназначен для прямого вызова.

skyANAНаследник по прежнему может вызвать метод, если он вызовет метод, то будет инициализировано событие и выполнится код обработчика.
Не понял о каком методе идет речь.
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38627203
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile, речь о методе OnPreInit

Ну и о других методах жизненного цикла страницы. Они есть, они protected, и их можно переопределить в BasePage.
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38627210
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилskyANAP.S.: почему кстати зачастую подписываются на событие PreInit += OnPreInit, вместо переопределения метода?

на события подписываются вместо переопределения метода для снижения связностиНе понял.
Как наличие обработчика события внутри класса уменьшает связность? Намёк на то, что сей код надо вынести в другое место?
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38627219
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAКак наличие обработчика события внутри класса уменьшает связность?
позволяет не трогать иерархию наследования, я ж об общем случае, разных событий много, вавилонскую башню строить?

skyANAНамёк на то, что сей код надо вынести в другое место?
может быть вынесен
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38627254
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропиля ж об общем случаеПонятно. А я наоборот о конкретном.
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38627264
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAречь о методе OnPreInit
Меня смутило то что ты сразу после private метода стал говорить про вызов и поэтому пришлось уточнить.

Использование явной подписки и private метода не дает никакого серьезного выигрыша. Функциональность с точки зрения наследников тоже будет одинаковой. Я предпочитаю использование явной подписки в базовых классах по соображениям красоты - как я её понимаю :). Считаю что в базовом классе protected члены следует объявлять только когда они будут (могут) использоваться наследником. В целом я не против использования Page_PreInit или override OnPreInit методов.
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38627531
olegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо !
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38627563
olegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эм... только не понял, в чем смысл тогда всего этого, если так и так, что для мастерпейдж, что ДЛЯ КАЖДОЙ СТРАНИЦЫ нужно вносить ручные изменения (переназначать базовый класс) ? Для каждой страницы я и так могу указать Тему, без выкрутасов с подменой базового класса :)
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38627691
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegov, а чем Вам решение тов. bazile не подходит?
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38629891
olegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAolegov, а чем Вам решение тов. bazile не подходит?

Я не вижу в этом смысла. Если бы это решалось на уровне только мастерпейдж и не требовали, в дальнейшем, никаких действий над страницами, использующими этот мастерпейдж, то - да, но, в этом решении, так и так, необходимо вносить изменения в код каждой страницы (речь идет о создании страниц Visual Studio в реджиме дизафнера). Что мне тогда мешает, просто добавить в заголов страницы Theme="MyTheme" ? Да же, в таком случае, телодвижений меньше получается.
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38629898
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegov, ну не хотите как хотите. Завтра Вас попросят сменить тему для группы страниц и Вы вспомните о "телодвижений меньше получается"
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38634972
olegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, Так я и изменю лишь описания в файлах указанной темы :) В чем проблема ?
...
Рейтинг: 0 / 0
Как установить тему оформления на уровне MasterPage
    #38634979
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegovskyANA, Так я и изменю лишь описания в файлах указанной темы :) В чем проблема ?Я не знаю, что такое "описания в файлах указанной темы". Если понадобится одну группу переключить с ThemeOne на ThemeTwo, то в Вашем случае надо будет всем страницам группы явно прописывать ThemeOne.

Если использовать решение тов. bazile, то только в одном месте изменить: в MasterPage для данной группы.

Выбирайте сами, что Вас больше устраивает.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как установить тему оформления на уровне MasterPage
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]