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

Я хочу иметь возможность установить тему 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 или в Page.Theme.

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

Ответы [ 2 ]

3 голосов
/ 20 января 2009

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

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


public class MyPageOne : PageBase
{
 ...
}
0 голосов
/ 20 января 2009

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

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

...