在Asp.Net中以编程方式添加StyleSheets

我想在头部以编程方式添加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()方法,但它也没有用。 Object null抛出了一些错误。

我还使用了Page.Header.InnerHtmlInnerText += "但是他们抛出了Literal错误,这是我认为常见的错误。

我用过这段代码:

 List cssFiles = new List(); cssFiles.Add(new Literal() { Text = @"" }); cssFiles.Add(new Literal() { Text = @"" }); AddStyleRange(cssFiles); private void AddStyleRange(List cssFiles) { foreach (Literal item in cssFiles) { this.Header.Controls.Add(item); } } 

它最初工作,但当我更改页面时它停止工作。

我正在使用Master Page,我正在Master.cs文件中编写这些代码,也有人建议使用this.Header而不是Page.Header但是当我构建它时抛出一个错误,说我不能这样声明。

添加许多样式应该不难。

它变得越来越复杂。

好的,这是我目前使用的解决方案:

我创建了一个帮助类:

 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 = @"" }; 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); //... 

所以我可以用一行简单的代码添加我想要的内容。

它还适用于母版页和内容页面关系。

希望能帮助到你。

PS:我不知道这个和其他解决方案之间的性能差异,但它看起来更优雅,更容易消费。

我会贴上对我有用的东西:

 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); 

即使我对此进行了大量搜索,我也会在点击按钮时添加一个重写样式表。 我使用了上面的代码,它对我很有用。

我定义了一个通用的HTML 并以编程方式设置href属性。

例如,在页面中,我有:

 . 

然后在Page_Load中设置cssStyle的Href属性:

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

看起来有点清洁,因为设计控制将按所需顺序放置。

我走了一步,我想要一个让我无法添加包含重复项的方法,比如ClientScriptManager.RegisterClientScriptInclude() 。 解决方案是为Header部分中添加的控件提供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