常常看到有的網站通過DropDownList、菜單或按鈕實現對整個網站改變頁面風格(換膚)。專門Google了一些這方面的資料,總結了一下實現以上功能大致可以分成兩類:
1、整個網站統一使用一個CSS檔案,保證一類風格。通過切換不同風格的CSS檔案實現換膚。這種方法實現
起來比較簡單。
2、不同風格、不同布局的UseControl,使用相同的後台代碼(商務邏輯、功能)。通過重新導向頁面實現
頁面換膚。這種方法比較複雜,以後再討論。
先看第一種方法:切換CSS檔案換膚。
1、正常的頁面如果需要指定所引用的CSS檔案,必須在<head></head>裡用<link>控制項指定CSS檔案,如
<head>
<link rel=stylesheet type=text/css href=mycss.css />
</head>
如果需要切換CSS,就不能再定死這個<link>了。可以通過後台代碼動態地改變這個控制項的屬性。
可以用<asp:placeholder>控制項來代替。placeholder控制項可以理解成一個控制項的容器,就像一個透明的包,你往裡面裝什麼,它就是什麼。
現在頁面變成了這個樣子,我們在裡面放了一個空的placeholder來代替link.<head>
<asp:placeholder id="MyCss" runat="server"/>
</head>
在後台代碼中定義一個函數,負責往placeholder裡裝東西,這裡裝css檔案public void ChangeSkin(string cssFile)
{
//產生一個新的HtmlGenericControl控制項,它是一個link控制項
HtmlGenericControl objLink = new HtmlGenericControl("link");
//定義這個Link的各項屬性
objLink.ID = ID;
objLink.Attributes["rel"] = "stylesheet";
objLink.Attributes["type"] = "text/css";
objLink.Attributes["href"] = cssFile;
//把Link控制項加到PlaceHolder控制項中去
MyCss.Controls.Add(objLink);
}
到這裡,可以在頁面裡放2個按鈕,按按鈕切換不同的CSS檔案
2、有的網站能把使用者選擇的樣式儲存起來,下次訪問繼續保留上次選擇的風格。
對於此類,可以用用戶端的Cookie來保留選擇的樣式。
private void Page_Load(object sender, System.EventArgs e)
{
// 在此處放置使用者代碼以初始化頁面
if(!Page.IsPostBack)
{
//判斷用戶端的瀏覽器是否支援Cookie
if(Request.Browser.Cookies == false)
label1.Text = "瀏覽器不支援Cookie !";
else
label1.Text = "瀏覽器支援Cookie !";
//用戶端是否有Skin資訊儲存
if(Request.Cookies["Skin"] == null)
{
ChangeSkin("default.css");
label2.Text = "Cookie 為空白,預設CSS";
}
else
{
//根據用戶端保留的Cookie資訊,來載入不同的CSS樣式表檔案
switch(Request.Cookies["Skin"].Value)
{
case "Red" : ChangeSkin("mycss2.css");
label2.Text = "Cookie中的CSS為紅色";
break;
case "Blue" : ChangeSkin("mycss.css");
label2.Text = "Cookie中的CSS為藍色";
break;
default: ChangeSkin("default.css");
// break;
}
}
}
當使用者按下按鈕選擇樣式的時候,還需要保留這些資訊到Cookie中。
public void SetCookie(string style)
{
HttpCookie myCookie = new HttpCookie("Skin");
myCookie.Value = style;
Response.Cookies.Add(myCookie);
}
public void btClick(object src, EventArgs e)
{
SetCookie("Red");
ChangeSkin("mycss2.css");
label2.Text = "現在設為紅色" ;
}