Как установить тему для сайта ASP.NET на странице «шлюз»?

Я хочу иметь возможность установить тему ASP.NET на странице шлюза, которая будет определять тему на основе идентификатора партнера или чего-то подобного. Я полагаю, я бы просто вставил имя темы в сеанс и получил его оттуда, если мне это нужно.

Мне не удается найти подходящее место для размещения этого кода в одном месте.

Кажется, я не вижу глобального места, где вы можете установить тему. Вы должны установить его для каждой страницы.

Как описано в MSDN вы можете назначить свойство Theme в функции PreInit для страницы.

Protected void Page_PreInit(object sender, EventArgs e)
{
    switch (Request.QueryString["theme"])
    {
        case "Blue":
           Page.Theme = "BlueTheme";
            break;

        case "Pink":
           Page.Theme = "PinkTheme";
            break;
    }
}

Итак, я подумал, что хорошо - я просто сделаю это на своей главной странице. К сожалению, копирование того же самого кода на главную страницу не работает. Поэтому я подумал - хм, может быть, мастер-страницы не используют это событие. Оказывается, это правда.

Я ДЕЙСТВИТЕЛЬНО не хочу размещать этот код темы на каждой странице с контентом. Это кажется совершенно глупым. Но другого пути пока найти не могу. MSDN описывает только два способы применения темы к странице - в web.config или с помощью PageTheme.

Придется ли мне создать подкласс Page, чтобы все мои страницы были подклассом этой страницы и переопределили PreInit в этом подклассе? Я думаю, что мне что-то не хватает, потому что я не могу представить, что MS действительно ожидает, что люди будут программно устанавливать тему на каждой странице с контентом.


person Simon_Weaver    schedule 20.01.2009    source источник


Ответы (2)


Один из вариантов - создать собственный базовый класс страницы и обрабатывать переключение / настройку темы там. Затем используйте этот класс как базовый класс для всех ваших страниц.

public class PageBase : Page
{
  protected void Page_PreInit(object sender, EventArgs e)
  {
    //..
    Page.Theme = "BlueTheme";
    //..
  }
}


public class MyPageOne : PageBase
{
 ...
}
person M4N    schedule 20.01.2009

Если на вашем сайте используется чистая разметка, вы можете так же легко переключать таблицы стилей на основе строки запроса, типа браузера, информации для входа и т. Д.

Использование CSS может сэкономить вам много времени в будущем при создании новых тем / мастер-страниц / разметки ... и т. Д.

person Birk    schedule 20.01.2009
comment
моя тема также используется для управления другой логикой, например, какие кнопки появляются в строках меню и некоторые другие динамические элементы управления на страницах - person Simon_Weaver; 20.01.2009