2010-05-31 44 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>