在自定义控件中包含css通常的做法是这样的:
string csslink = "<link href='" + url + "' rel='stylesheet' type='text/css' />";
LiteralControl include = new LiteralControl(csslink);
page.Header.Controls.Add(include);
但以上程序有一个问题,就是当Header中存在 <%%>的代码块的时候,会出现运行时错误,解决此种问题的方法是,既不能要求用户(使用控件的人)不在Header中使用代码块<%%>,也不能直接Page.Controls.Add(include),因为这同样会出现运行时错误
我的做法如下:
public static class ControlExtension
{
public static void IncludeCss(this Control control,String webResouce)
{
String cssUrl = control.Page.ClientScript.GetWebResourceUrl(control.GetType(), webResouce);
LiteralControl cssLink = new LiteralControl("<link href='" + cssUrl + "' rel='stylesheet' type='text/css' />");
control.Controls.Add(cssLink); //加到自定义控件本身
}
}
使用举例,在一个复全控件中:
protected override void CreateChildControls()
{
this.IncludeCss("myNamespace.cssDirectory.my.css"); //包含指定资源代表的css文件
//其它子控件代码,此处略
}
打开页面查看源文件:
<span id="myCustomControl"><link href='/WebResource.axd?d=T-gej6K8_w1LkIj4bdXyqrRrlMm-k0JVbBNwrI0dxqXiG_WAIlV2hihdU42EmH1cVUHmP8WzxmtYZOJYBm_7itbs3R2ivvV161BQMXNp1sI4lSTAuMJXbJp_OT2OaVRaF58CsLcgb_QGMvPsFTBDBLtXKZ0Y9mk0_W0m0AND0gNwD7SC0&t=634680192080902436' rel='stylesheet' type='text/css' />