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

Posted

技术标签:

【中文标题】在 Asp.Net 中以编程方式添加样式表【英文标题】:Adding StyleSheets Programmatically in Asp.Net 【发布时间】:2011-02-25 22:44:57 【问题描述】:

我想以编程方式在 head 部分添加样式表,但我看到的一个示例似乎需要很多行代码才能添加一个样式表,即使我可能需要很多:

示例代码:

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 error,这是我认为常见的错误。

我使用了这个代码:

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

添加许多样式应该不难。

事情变得复杂了。

【问题讨论】:

【参考方案1】:

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

我创建了一个辅助类:

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

【讨论】:

我发现了一个问题:确保您的 标签具有 runat="server" 否则代码将找不到它。 对于 icon?:&lt;link href="https://www.viesgo.com/wp-content/uploads/vsg-favicon.png" rel="icon" sizes="32x32"&gt;【参考方案2】:

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

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

即使我对此进行了很多搜索,我还是会在单击按钮时添加一个覆盖样式表。我使用了上面的代码,它对我来说很完美。

【讨论】:

顺便说一句,我使用母版页,按钮位于页脚中;所以粘贴的代码。【参考方案3】:

我定义了一个通用 HTML &lt;link&gt; 并以编程方式设置 href 属性。

例如在页面&lt;head&gt;我有:

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

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

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

通过设计控制将&lt;link&gt;按所需顺序放置的好处似乎更简洁。

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于在 Asp.Net 中以编程方式添加样式表的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET 中将 HTML 转换为 PDF 时保持 CSS 样式[关闭]

如何在我们的用户控件中应用样式表

ASP。NET 中怎么套用 样式表 即CSS

Qt 将样式从外部样式表应用到以编程方式添加的小部件

php 在WordPress中以正确的方式排列IE条件样式表

php 在WordPress中以正确的方式排列IE条件样式表