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

时间:2010-05-31 10:57:49

标签: c# asp.net css

我想在头部以编程方式添加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 += "<link .... "/>的东西,但他们抛出了Literal错误,这是我认为常见的错误。

我使用了这段代码:

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但是当我构建它时会抛出一个错误我不能这样声明。

添加许多样式应该不难。

它变得越来越复杂。

4 个答案:

答案 0 :(得分:44)

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

我创建了一个帮助类:

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:我不知道这个和其他解决方案之间的性能差异,但它看起来更优雅,更容易消费。

答案 1 :(得分:5)

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

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

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

答案 2 :(得分: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>置于所需的顺序。

答案 3 :(得分:2)

我走了一步,我想要一种让我无法添加包含重复项的方法,例如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