Как динамически изменить тему всего приложения ASP.NET? - PullRequest
5 голосов
/ 23 июня 2010

Представьте себе приложение ASP.NET с несколькими темами, определенными в нем. Как я могу динамически изменить тему всего приложения (не только одной страницы). Я знаю, что это возможно через <pages Theme="Themename" /> в web.config. Но я хочу быть в состоянии изменить это динамически. Как мне это сделать?

Заранее спасибо

Ответы [ 3 ]

6 голосов
/ 23 июня 2010

Вы можете сделать это на Page_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;
    }
}
3 голосов
/ 11 апреля 2012

Это очень поздний ответ, но я думаю, что вам понравится ..

Вы можете изменить тему страницы в событии PreInit, но у вас нет базовой страницы ..

На главной странице создайте выпадающий список с именем ddlTema, после чего напишите этот блок кода в свой Global.asax. Посмотрите, как работает магия:)

public class Global : System.Web.HttpApplication
{

    protected void Application_PostMapRequestHandler(object sender, EventArgs e)
    {
        Page activePage = HttpContext.Current.Handler as Page;
        if (activePage == null)
        {
            return;
        }
        activePage.PreInit
            += (s, ea) =>
            {

                string selectedTheme = HttpContext.Current.Session["SelectedTheme"] as string;
                if (Request.Form["ctl00$ddlTema"] != null)
                {
                    HttpContext.Current.Session["SelectedTheme"]
                        = activePage.Theme = Request.Form["ctl00$ddlTema"];
                }
                else if (selectedTheme != null)
                {
                    activePage.Theme = selectedTheme;
                }

            };
    }
1 голос
/ 23 июня 2010

сохраните общую базовую страницу для всех ваших страниц asp.net и измените свойство темы между любыми событиями после PreInit или до Page_Load на базовой странице.Это заставит каждую страницу применять эту тему.Как и в этом примере, сделайте MyPage базовой страницей для всей вашей страницы asp.net.

public class MyPage : System.Web.UI.Page
{
    /// <summary>
    /// Initializes a new instance of the Page class.
    /// </summary>
    public Page()
    {
        this.Init += new EventHandler(this.Page_Init);
    }


    private void Page_Init(object sender, EventArgs e)
    {
        try
        {
            this.Theme = "YourTheme"; // It can also come from AppSettings.
        }
        catch
        {
            //handle the situation gracefully.
        }
    }
}

//in your asp.net page code-behind

public partial class contact : MyPage
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
}
...