2010-06-23 5 views
5

Stellen Sie sich eine ASP.NET-Anwendung vor, in der mehrere Themen definiert sind. Wie kann ich das Thema der gesamten Anwendung (nicht nur eine einzelne Seite) dynamisch ändern? Ich weiß, dass es durch <pages Theme="Themename" /> in web.config möglich ist. Aber ich möchte es dynamisch ändern können. Wie soll ich es machen?Wie Thema einer gesamten ASP.NET-Anwendung dynamisch ändern?

Vielen Dank im Voraus

Antwort

6

Sie können dies auf Page_PreInitas explained here:

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    switch (Request.QueryString["theme"]) 
    { 
     case "Blue": 
      Page.Theme = "BlueTheme"; 
      break; 
     case "Pink": 
      Page.Theme = "PinkTheme"; 
      break; 
    } 
} 
+0

@this. __curious_geek, warum sollten Sie es lieber in Page_Load not Pre_Int machen? –

1

hält eine gemeinsame Basis Seite für alle Ihre asp.net Seiten und das Thema Eigentum zwischen jedem Fall ändern, nachdem PreInit oder vor den Page_Load in der Basisseite. Dadurch wird jede Seite gezwungen, dieses Thema anzuwenden. Wie in diesem Beispiel machen Sie MyPage als Basisseite für all Ihre asp.net-Seite.

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) 
    { 

    } 
} 
+0

Tun Sie dies nicht in Page_Load, sondern in 'PreInit'. –

+0

rechts. Die Antwort wurde aktualisiert. Vielen Dank. –

3

Es ist eine sehr späte Antwort, aber ich glaube, Sie dies mögen ..

Sie können das Thema der Seite ändern in PreInit-Ereignis, aber Sie haben keine Basisseite verwenden.

In masterpage erstellen Sie ein Dropdown namens ddlTema, danach schreiben Sie diesen Codeblock in Ihrem Global.asax. Sehen Sie, wie Magie funktioniert :)

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; 
       } 

      }; 
    }