从 ASP.NET 服务器控件动态添加 CSS 文件
Posted
技术标签:
【中文标题】从 ASP.NET 服务器控件动态添加 CSS 文件【英文标题】:Dynamically adding a CSS file from an ASP.NET Server Control 【发布时间】:2011-02-08 02:27:14 【问题描述】:我有一个自定义控件,我想动态插入指向样式表的链接。
可能不是今年最好的解决方案,但需要完成。知道怎么做吗?
每次我尝试,Page.Header 都是空的。
【问题讨论】:
您在页面生命周期的哪个时间点尝试访问 Page.Header? 【参考方案1】:以下是通常以编程方式添加 CSS 的方式:
protected void Page_Init(object sender, EventArgs e)
var link = new htmlLink();
link.Href = "~/styles/main.css";
link.Attributes.Add("rel", "stylesheet");
link.Attributes.Add("type", "text/css");
Page.Header.Controls.Add(link);
您可能需要在head
标记中添加runat="server"
:
<head runat="server">
<title>Add CSS example</title>
</head>
【讨论】:
知道了。我的母版页的标题标签中缺少 Runat="Server"。 :) 谢谢! 如果您在页面上添加了 10 次控件,这不是问题吗?然后 CSS 文件将被链接 10 次。 @Peter,是的,我想这会有问题。【参考方案2】:为避免页面10次添加控件时出现多个样式表的问题,将上面的代码稍作改动:
string styleSheet = "stylesheetName.css";
if (this.Page.Header.FindControl(styleSheet) == null)
HtmlLink cssLink = new HtmlLink();
cssLink.ID = styleSheet;
cssLink.Href = "~/styles/" + styleSheet;
cssLink.Attributes.Add("rel", "stylesheet");
cssLink.Attributes.Add("type", "text/css");
this.Page.Header.Controls.Add(cssLink);
通过给控件一个 ID,您可以检查它是否已经存在,因此确保您只添加一次。
【讨论】:
以上是关于从 ASP.NET 服务器控件动态添加 CSS 文件的主要内容,如果未能解决你的问题,请参考以下文章
JQuery datepicker() 由 ASP.net 中的 CSS 类动态创建 TemplateFields
为啥 ASP.NET 动态控件即使添加到 Page_Load 中也能保持 ViewState?