2010-06-23 35 views
5

Hãy tưởng tượng một ứng dụng ASP.NET với một số chủ đề được xác định bên trong nó. Làm thế nào tôi có thể thay đổi chủ đề của tổng số ứng dụng (không chỉ là một trang) động. Tôi biết điều đó là có thể thông qua <pages Theme="Themename" /> trong web.config. Nhưng tôi muốn có thể thay đổi nó một cách năng động. Làm thế nào shpuld tôi làm điều đó?Làm thế nào để thay đổi chủ đề của một ứng dụng ASP.NET tổng động?

Cảm ơn trước

Trả lời

6

Bạn có thể làm điều này trên 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, tại sao thích làm điều đó trong Page_Load không phải Pre_Int? –

1

giữ một trang cơ sở chung cho tất cả các trang asp.net của bạn và thay đổi thuộc tính chủ đề giữa bất kỳ sự kiện sau khi PreInit hoặc trước Page_Load trong trang cơ sở. Điều này sẽ buộc mỗi trang áp dụng chủ đề đó. Như trong ví dụ này làm cho MyPage như trang cơ sở cho tất cả các trang asp.net của bạn.

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

Đừng làm điều này trong Page_Load, nhưng trong 'Tiền tố'. –

+0

. Đã cập nhật câu trả lời. Cảm ơn. –

3

Đó là một câu trả lời rất muộn, nhưng tôi nghĩ bạn sẽ thích này ..

Bạn có thể thay đổi Theme of the page trong sự kiện PreInit, nhưng bạn không sử dụng trang cơ sở ..

Trong trang chính tạo danh sách thả xuống có tên ddlTema, sau đó viết khối mã này trong Global.asax của bạn. Xem cách hoạt động của phép thuật :)

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

      }; 
    } 
Các vấn đề liên quan