2010-06-23 12 views
5

Wyobraź sobie aplikację ASP.NET z wieloma tematami zdefiniowanymi w niej. Jak mogę dynamicznie zmieniać motyw całej aplikacji (nie tylko pojedynczej strony). Wiem, że jest to możliwe poprzez <pages Theme="Themename" /> w web.config. Ale chcę być w stanie zmienić ją dynamicznie. Jak ja to robię?Jak dynamicznie zmieniać temat całej aplikacji ASP.NET?

Dzięki z góry

Odpowiedz

6

Można to zrobić na 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, dlaczego wolisz to robić w Page_Load nie Pre_Int? –

1

zachować wspólną stronę bazową dla wszystkich stron ASP.NET i zmodyfikować właściwość motyw pomiędzy każdym razie po PreInit lub przed Page_Load w stronę bazy. Zmusi to każdą stronę do zastosowania tego tematu. Tak jak w tym przykładzie, uczyń z MyPage stronę podstawową dla wszystkich stron 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) 
    { 

    } 
} 
+0

Nie rób tego w Page_Load, ale w 'PreInit'. –

+0

w prawo. Zaktualizowano odpowiedź. Dzięki. –

3

Jest to bardzo późno odpowiedź, ale myślę, że będzie tak ..

Można zmienić temat strony w zdarzeniu PreInit, ale nie używasz strony podstawowej.

Na stronie głównej utwórz listę rozwijaną o nazwie ddlTema, następnie wpisz ten blok kodu w pliku Global.asax. Zobacz, jak działa magia :)

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

      }; 
    } 
Powiązane problemy