从 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用户自定义控件

asp.net 动态添加多个用户控件

为啥 ASP.NET 动态控件即使添加到 Page_Load 中也能保持 ViewState?

在引导模式主体中动态添加的 asp.net 按钮/链接按钮 web 控件不会回发

ASP.NET给前端动态添加修改 CSS样式JS 标题 关键字