2010-05-31 51 views
23

我想以編程方式在頭部添加StyleSheets,但我看到的一個示例似乎需要多行代碼才能添加一個樣式表,即使我可能需要很多:在Asp.Net中以編程方式添加StyleSheets

示例代碼:

HtmlLink css = new HtmlLink(); 
css.Href = "css/fancyforms.css"; 
css.Attributes["rel"] = "stylesheet"; 
css.Attributes["type"] = "text/css"; 
css.Attributes["media"] = "all"; 
Page.Header.Controls.Add(css); 

我也用Page.Header.RenderControl()方法,但它也不能工作。對象null拋出錯誤。

我也用過Page.Header.InnerHtmlInnerText += "<link .... "/>的東西,但是他們拋出了我認爲常見錯誤的文字錯誤。

我用這個代碼:

List<Literal> cssFiles = new List<Literal>(); 
cssFiles.Add(new Literal() { Text = @"<link href=""" + ResolveUrl("~/Resources/Styles/MainMaster/MainDesign.css") + @""" type=""text/css"" rel=""stylesheet"" />" }); 
cssFiles.Add(new Literal() { Text = @"<link href=""" + ResolveUrl("~/Resources/Styles/MainMaster/MainLayout.css") + @""" type=""text/css"" rel=""stylesheet"" />" }); 
AddStyleRange(cssFiles); 

private void AddStyleRange(List<Literal> cssFiles) 
{ 
    foreach (Literal item in cssFiles) 
    { 
    this.Header.Controls.Add(item); 
    } 
} 

它曾在第一,但是當我改變它的網頁停止工作。

我使用的母版頁,我對Master.cs文件編寫這些代碼,也有一些人建議使用this.Header代替Page.Header,但是當我建立它拋出它說我不能宣佈這樣的錯誤。

它不應該很難添加很多風格。

它變得越來越複雜。

回答

42

好了,這是我目前使用的解決方案:

我創建了一個輔助類:

using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace BusinessLogic.Helper 
{ 
    public class CssAdder 
    { 
     public static void AddCss(string path, Page page) 
     { 
      Literal cssFile = new Literal() { Text = @"<link href=""" + page.ResolveUrl(path) + @""" type=""text/css"" rel=""stylesheet"" />" }; 
      page.Header.Controls.Add(cssFile); 
     } 
    } 
} 

,然後通過這個輔助類,所有我需要做的就是:

CssAdder.AddCss("~/Resources/Styles/MainMaster/MainDesign.css", this.Page); 
CssAdder.AddCss("~/Resources/Styles/MainMaster/MainLayout.css", this.Page); 
CssAdder.AddCss("~/Resources/Styles/Controls/RightMainMenu.css", this.Page); 
//... 

因此,我可以儘可能多地添加一行簡單代碼。

它也適用於主頁和內容頁面關係。

希望它有幫助。

P.S:我不知道這個解決方案和其他解決方案之間的性能差異,但它看起來更優雅,更容易使用。如果你知道更好的方法,請讓我知道。謝謝...

+0

我發現的一個問題:確保你的標籤有runat =「server」或代碼不會找到它。 – SteveCav 2017-01-09 00:51:18

4

我將其粘貼爲我工作的事情:

HtmlLink link = new HtmlLink(); 
//Add appropriate attributes 
link.Attributes.Add("rel", "stylesheet"); 
link.Attributes.Add("type", "text/css"); 
link.Href = "/Resources/CSS/NewStyles.css"; 
link.Attributes.Add("media", "screen, projection"); 
//add it to page head section 
this.Page.Header.Controls.Add(link); 

即使我搜查這個有很多,我會一個按鈕被點擊時添加一個壓倒一切的樣式表。我使用了上面的代碼,它對我完全起作用。

+0

順便說一句,我使用的是一個母版頁,並且該按鈕位於頁腳中;作爲粘貼的代碼。 – Kay 2010-05-31 12:15:04

+0

謝謝,但這是我上面提到的,所以我不想這個解決方案。其實我找到了解決方案tho :) – Tarik 2010-06-03 07:40:30

+0

這太棒了!你能讓我知道你想出來的解決方案嗎? – Kay 2010-06-03 18:23:49

2

我走了一步,我想要一個方法,使我無法添加包括重複項,像ClientScriptManager.RegisterClientScriptInclude()。 解決方法是給標題部分中添加的控件添加一個ID。

if (!String.IsNullOrEmpty(Key)) 
    if (Page.Header.FindControl(Key) != null) return; 

HtmlLink link = new HtmlLink(); 
if (!String.IsNullOrEmpty(Key)) link.ID = Key; 
link.Href = StyleUrl; 
link.Attributes.Add("type", "text/css"); 
link.Attributes.Add("rel", "stylesheet"); 
Page.Header.Controls.Add(link); 

有關完整的文章中,我寫道:http://www.idea-r.it/Blog.aspx?Article=49

3

我定義一個通用的HTML <link>和編程設置href屬性。

例如,在<head>頁面我有:

<link id="cssStyle" runat="server" rel="stylesheet" type="text/css" />. 

然後在Page_Load中設置cssStyle的href屬性:

cssStyle.Href = "path/to/Styles.css"; 

似乎與具有設計控制的上側的位吸塵器通過按要求的順序放置<link>

相關問題