2010-04-14 81 views
6

我有一个自定义控件,我想动态地插入到样式表的链接。从ASP.NET服务器控件动态添加CSS文件

可能不是今年的最佳解决方案,但它需要完成。任何想法如何做到这一点?

每当我尝试,Page.Header为空。

+0

在页面生命周期的哪个阶段您尝试访问Page.Header? – 2010-04-14 20:18:33

回答

17

这里是你会怎么通常会添加一些编程一个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); 
} 

你可能需要把runat="server"head标签:

<head runat="server"> 
    <title>Add CSS example</title> 
</head> 
+0

明白了。我在主页面的标题标记中缺少Runat =“Server”。 :) 谢谢! – 2010-04-14 20:23:41

+1

如果您在页面上添加了10次控制,那么这不会成为问题吗?然后CSS文件将被链接10次。 – Peter 2011-05-24 13:48:16

+0

@Peter,是的,我想这会有问题。 – 2011-05-24 14:01:45

7

为了避免多个样式表的问题,加入时控制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,你可以检查它是否已经存在,所以确保你只添加一次。