2009-04-28 4 views
2

Ich habe ein Benutzersteuerelement, das einen Verweis auf eine CSS-Datei implementiert, jetzt möchte ich dieses Benutzersteuerelement viele Male auf der Seite verwenden, und dies wird zur Duplizierung der Aufnahme der CSS-Datei führen.Verhinderung der Duplizierung von CSS-Dateien?

Mit Javascript-Dateien ist es einfach mit der ScriptManager.

Also was ist Ihr Vorschlag für eine Lösung oder einen ähnlichen Ansatz für die ScriptManager?

Antwort

1

Es gibt keine einfache Möglichkeit, zu überprüfen, ob die Stile auf der Seite wie ClientScript Dienstprogramm registriert sind.

Wenn Sie sich registrieren Ihre Stile als eine externe CSS-Datei auf Seite wie folgt aus:

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

Sie können dann prüfen, ob es Kontrollen durch Schleifen der Seitenkopf Sammlung existiert und auf der Suche nach dem Pfad der CSS-Datei.

+0

sondern Ursache Overhead nicht Looping? – DevMania

+1

Die Steuersammlung des Headers enthält nur Tags mit dem Attribut runat = server. Und wahrscheinlich wird die einzige Kontrolle diese CSS-Datei in der Sammlung sein, wenn es hinzugefügt wird :) – Canavar

+0

vielen Dank Kumpel ich denke, das ist der beste Weg :) – DevMania

3

Hier ist eine Technik, die ich vorher benutzt habe, obwohl es nicht die beste sein kann:

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

Wie q markiert ist C# dachte ich, als auch in C# -Version von Hilfsklasse einfügen können:

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); 
     }    
} 
Verwandte Themen