換皮膚的方式有很多種,最簡(jiǎn)單的通常就是切換頁(yè)面CSS,而CSS通常寫(xiě)在外部CSS文件里。那么切換css其實(shí)就是更換html里的link href路徑。我在網(wǎng)上搜索了下。一般有兩種方式:
1,在頁(yè)面放一個(gè)holder控件。然后用編程方式把當(dāng)前用戶(hù)的風(fēng)格css link寫(xiě)入頁(yè)面。
2,通過(guò)反射機(jī)制,逐個(gè)控件設(shè)置css樣式。
上面兩種方式都挺麻煩的,
第一種需要在每個(gè)頁(yè)面上放一個(gè)holder控件。類(lèi)似的做法還有把link標(biāo)簽加runat=server的做法。頁(yè)面多了,都比較麻煩。
第二種不用考慮了。性能編程效率上問(wèn)題多多。
記得以前在學(xué)習(xí)DNN的時(shí)候,在他里面發(fā)現(xiàn)了一種修改form里默認(rèn)的action地址的方式,直接參考下。還不錯(cuò):
直接重寫(xiě)Render事件
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
StringWriter sw = new StringWriter() ;
HtmlTextWriter htmlWriter = new HtmlTextWriter(sw) ;
base.Render(htmlWriter) ;
//當(dāng)前用戶(hù)選擇的風(fēng)格css
string css = "<link href=/"css url/" 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) ;
}
把這個(gè)放在每個(gè)頁(yè)面的基類(lèi)PageBase里。那就方便多了。
當(dāng)然,如果不想在讓每個(gè)page都繼承自定義的基類(lèi)的方式,那也可以通過(guò)在HttpModule里寫(xiě)。也很方便.
一處寫(xiě)好,頁(yè)頁(yè)受用呀。
更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄