Как программно и во время выполнения изменить тему веб-приложения asp (не страницу)? - PullRequest
5 голосов
/ 26 января 2012

Я изучаю ASP.net и играюсь с темами и мастер-страницами.Я решил, что хочу изменить тему сайта, и воспользовался решением web.config (добавив тему в web.config).То, что я хочу сделать сейчас, - это возможность изменять тему в зависимости от пользователя и выбранной темы пользователем.

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

Как вы поступаете так, самым простым способом?Я не подключен к базе данных атм., Это просто для практики:)

с уважением

Ответы [ 3 ]

2 голосов
/ 26 января 2012

Создайте базовую страницу, от которой вы наследуете все свои страницы, и установите тему в событии OnPreInit:

public class ThemePage : System.Web.UI.Page
{
    protected override void OnPreInit(EventArgs e)
    {
        SetTheme();            

        base.OnPreInit(e);
    }

    private void SetTheme()
    {
        this.Theme = ThemeSwitcher.GetCurrentTheme();
    }
}

Ниже приведен служебный класс ThemeSwitcher, который обрабатывает получение / сохранение текущей темы и вывод списка тем.Поскольку вы сказали, что не используете базу данных, вы можете использовать Session:

public class ThemeSwitcher
{
    private const string ThemeSessionKey = "theme";

    public static string GetCurrentTheme()
    {
        var theme = HttpContext.Current.Session[ThemeSessionKey]
            as string;

        return theme ?? "Default";
    }

    public static void SaveCurrentTheme(string theme)
    {
        HttpContext.Current.Session[ThemeSessionKey]
            = theme;
    }

    public static string[] ListThemes()
    {
        return (from d in Directory.GetDirectories(HttpContext.Current.Server.MapPath("~/app_themes"))
                select Path.GetFileName(d)).ToArray();
    }
}

. Вам понадобится страница, где вы можете изменить тему.Добавьте выпадающий список со следующим кодом:

public partial class _Default : ThemePage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            BindData();
        }
    }

    private void BindData()
    {
        var currentTheme = ThemeSwitcher.GetCurrentTheme();

        foreach (var theme in ThemeSwitcher.ListThemes())
        {
            var item = new ListItem(theme);
            item.Selected = theme == currentTheme;
            ddlThemes.Items.Add(item);
        }
    }

    protected void ddlThemes_SelectedIndexChanged(object sender, EventArgs e)
    {
        ThemeSwitcher.SaveCurrentTheme(ddlThemes.SelectedItem.Value);
        Response.Redirect("~/default.aspx");
    }       
}

Вы можете загрузить образец приложения здесь .

1 голос
/ 26 января 2012

Взгляните на эти полезные документы MSDN:

Пошаговое руководство. Создание тем по выбору пользователя

Как: программно применять темы ASP.NET

Проверьте это тоже:

Главные страницы и темы

Темы Scoping

Вы не можете напрямую применить тему ASP.NET к главной странице. если ты добавьте атрибут темы в директиву @ Master, страница поднимется ошибка при запуске.

1 голос
/ 26 января 2012

Я уже видел это, унаследовав все ваши страницы от базовой страницы

    public partial class _Default : BasePage

и установив тему в классе базовой страницы.

public class BasePage : System.Web.UI.Page
{
  protected override void OnPreInit(EventArgs e)
  {
       base.OnPreInit(e);
       Page.Theme = //Your theme;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...