防止重复CSS文件?

时间:2009-04-28 17:16:33

标签: c# asp.net css

我有一个实现对css文件的引用的用户控件,现在我想在页面上多次使用此用户控件,这将导致重复包含css文件。

使用javascript文件,使用ScriptManager

很简单

那么您对ScriptManager的解决方案或类似方法的建议是什么?

3 个答案:

答案 0 :(得分:3)

这是我之前使用的一种技术,虽然它可能不是最好的技术:

    Dim cssLink As String = String.Format("<link rel='stylesheet' type='text/css' href='{0}/css/cssLink.css' />", Request.ApplicationPath)
    If (From c As LiteralControl In Page.Header.Controls.OfType(Of LiteralControl)() Where c.Text = cssLink).Count = 0 Then
        Page.Header.Controls.Add(New LiteralControl(cssLink))
    End If

答案 1 :(得分:2)

由于q被标记为c#,我想也可以从辅助类中粘贴c#版本:

 public static void AddStyleLink(string href)
 {
      Page page = (Page)HttpContext.Current.CurrentHandler;        

      var existing = 
          (from c 
          in page.Header.Controls.OfType<HtmlGenericControl>() 
          where c.Attributes["href"] == href
          select c).FirstOrDefault();

      if (existing == null)
      {
          HtmlGenericControl link = new HtmlGenericControl("link");
          link.Attributes.Add("rel", "stylesheet");
          link.Attributes.Add("href", href);
          page.Header.Controls.Add(link);
      }            
 }

答案 2 :(得分:1)

没有简单的方法来检查样式是否已注册到页面,如ClientScript实用程序。

如果您将样式注册为外部css文件,请按以下方式注册:

HtmlLink link = new HtmlLink();
link.Href = relativePath;
link.Attributes["type"] = "text/css";
link.Attributes["rel"] = "stylesheet";
Page.Header.Controls.Add(link);

然后,您可以通过循环页眉的Controls集合并查找CSS文件的路径来检查它是否存在。