2009-04-28 5 views
2

У меня есть пользовательский элемент управления, который реализует ссылку на файл css, теперь я хочу использовать этот пользовательский контроль многократно на странице, и это приведет к дублированию включения файла css.Предотвращение дублирования файлов CSS?

С javascript-файлами это просто, используя ScriptManager.

Как вы предлагаете решение или аналогичный подход к ScriptManager?

ответ

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.

+0

но не зацикливание причины накладных расходов? – DevMania

+1

коллекция управления заголовком будет иметь только теги, которые имеют атрибут runat = server. И, вероятно, единственным контролем будет этот css-файл в коллекции, если он добавлен :) – Canavar

+0

спасибо большое, я думаю, что это лучший способ :) – DevMania

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 
2

Как д помечается с # подумал я, а может вставить в 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); 
     }    
} 
Смежные вопросы