天天看點

Asp.Net下通過切換CSS換皮膚

換皮膚的方式有很多種,最簡單的通常就是切換頁面CSS,而CSS通常寫在外部CSS檔案裡。那麼切換css其實就是更換html裡的link href路徑。我在網上搜尋了下。一般有兩種方式:

1,在頁面放一個holder控件。然後用程式設計方式把目前使用者的風格css link寫入頁面。

2,通過反射機制,逐個控件設定css樣式。

上面兩種方式都挺麻煩的,

第一種需要在每個頁面上放一個holder控件。類似的做法還有把link标簽加runat=server的做法。頁面多了,都比較麻煩。

第二種不用考慮了。性能程式設計效率上問題多多。

記得以前在學習DNN的時候,在他裡面發現了一種修改form裡預設的action位址的方式,直接參考下。還不錯:

直接重寫Render事件

  protected override void Render(System.Web.UI.HtmlTextWriter writer)

    {

      StringWriter sw = new StringWriter() ;

      HtmlTextWriter htmlWriter = new HtmlTextWriter(sw) ;

    base.Render(htmlWriter) ;

      //目前使用者選擇的風格css

      string css = "<link href="css url" target="_blank" rel="external nofollow" rel="stylesheet" type="text/css">" ;

    string html = sw.ToString() ;

      int startPoint = html.IndexOf("</head>", StringComparison.CurrentCultureIgnoreCase);

      if (startPoint > 0)

      {

        html = html.Insert(startPoint, css);

      }

    writer.Write(html) ;

    }

把這個放在每個頁面的基類PageBase裡。那就友善多了。

當然,如果不想在讓每個page都繼承自定義的基類的方式,那也可以通過在HttpModule裡寫。也很友善.