Как динамически изменить тему всего приложения ASP.NET?

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

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


person Afshar Mohebi    schedule 23.06.2010    source источник


Ответы (3)


Вы можете сделать это на 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;
    }
}
person Druid    schedule 23.06.2010
comment
@это. __curious_geek, почему вы предпочитаете делать это в Page_Load, а не в Pre_Int? - person Afshar Mohebi; 23.06.2010

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

Вы можете изменить тему страницы в событии 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;
                }

            };
    }
person mtcakmak    schedule 11.04.2012

сохраните общую базовую страницу для всех ваших страниц 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)
    {

    }
}
person this. __curious_geek    schedule 23.06.2010
comment
Делайте это не в Page_Load, а в PreInit. - person Jan Jongboom; 23.06.2010