2010-04-14 67 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,你可以檢查它是否已經存在,所以確保你只添加一次。