我想在头部分中以编程方式添加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.RenderControl()
我也使用了Page.Header.InnerHtml和InnerText += "<link .... "/>东西,但是它们抛出了文字错误,这是我认为的常见错误。
Page.Header.InnerHtml
InnerText += "<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但是在我构建它时会引发错误,表明我无法这样声明。
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 = @"<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); //...
因此,我可以用一行简单的代码添加任意数量的内容。
它还适用于母版页和内容页关系。
希望能帮助到你。
PS: 我不知道此解决方案与其他解决方案之间的性能差异,但它看起来更优雅且易于使用。