【问题标题】:Dynamically adding a CSS file from an ASP.NET Server Control从 ASP.NET 服务器控件动态添加 CSS 文件
【发布时间】:2011-02-08 02:27:14
【问题描述】:

我有一个自定义控件,我想动态插入指向样式表的链接。

可能不是今年最好的解决方案,但需要完成。知道怎么做吗?

每次我尝试,Page.Header 都是空的。

【问题讨论】:

  • 您在页面生命周期的哪个时间点尝试访问 Page.Header?

标签: asp.net css webforms


【解决方案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,您可以检查它是否已经存在,因此确保您只添加一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2011-06-03
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    相关资源
    最近更新 更多