Master Page 內容頁中使用CSS
ASP.NET 2.0 中增加了內建的 MasterPage 的支援,這對我們來說是一個很大的便利。然而經過一段時間的使用,我發現 MasterPage 並不是那麼完美:嵌套的 MasterPage 不能支援設計時介面,以及下面要提到的Content Page 中增加 CSS 的問題。
通常,在沒有 2.0 之前,我們在頁面裡要增加一個 CSS 引用的文法如下:
<link rel="stylesheet" href="css/test.css" />
原本是很平常的做法。但是在一個 MasterPage 的子頁面中,出現了一個很尷尬的局面,就是:我們該把上述代碼放到什麼位置?
因為 MasterPage 的具體內容頁面中,只能定義一個個的 <asp:Content /> 標籤的內容。我們按照通常的做法在 aspx 裡面無法對頁面的 <header/> 內容進行控制。而這個 <link/> 標籤又必須放在 <header/> 內。我實驗過在 <asp:Content /> 內部加入這行代碼,但是會提示出錯的。
同時,我們也無法在 MasterPage 的 <header/> 內部放好一個 ContentPlaceHolder 用於將來放入 CSS 的引用代碼。
因此我的做法是定義了一個 helper 類如下:
static public class ControlHelper
{
static public void AddStyleSheet(Page page, string cssPath)
{
HtmlLink link = new HtmlLink();
link.Href = cssPath;
link.Attributes["rel"] = "stylesheet";
link.Attributes["type"] = "text/css";
page.Header.Controls.Add(link);
}
}
這樣,在具體頁面,我們就可以通過如下代碼添加 CSS 引用:
protected void Page_Load(object sender, EventArgs e)
{
ControlHelper.AddStyleSheet(this.Page, "css/projectPage.css");
}
並且,這個代碼支援在具體內容頁面,或者一個嵌套的 Master Page 中使用。