Asp.Net 2.0 中为支持页面内容重用而引入了 Master Page 和 Content Page,Master Page 类是模板中页面公共部分,Content Page 为页面差异部分。
从实现上来说,MasterPage 类是从 UserControl 类派生而来,因而具有容器功能。当页面被请求,在 Page 类的 Init 事件发生前,MasterPage 页控件被加载到 Content Page 中。
可以在 MasterPage 页中加载页面的 CSS 样式表,或者 Asp.Net 2.0 中会加载 App_Themes 中的 CSS 文件,基本能满足对样式的定义需求。
但 Content 页面却失去了加载CSS的能力。因为 CSS 需要在页面的 head 部分加载,难道需要把差异化很大页面的 CSS 都统一写到一个 CSS 文件中,在打开页面时统一加载吗?
不用。方法如下:
可以在 content 页使用 HtmlGenericControl 动态调整 DOM 结构,使得两种类型内嵌和外链的样式表文件都能支持。
内嵌CSS支持
HtmlGenericControl node = new HtmlGenericControl("style");
node.Attributes.Add("type", "text/css");
node.InnerText = style;
Page.Header.Controls.Add(node);
外部样式支持
HtmlLink link = new HtmlLink();
link.Attributes.Add("type", "text/css");
link.Attributes.Add("rel", "stylesheet");
link.Attributes.Add("href", cssUrl);
Page.Header.Controls.Add(link);