2010-01-07 4 views
6

Ich habe ein wenig Code geschrieben, der bei der Versionsverwaltung von JS-Dateien hilft. Im Wesentlichen dreht es sich um den aktuellen Skriptmanager und hängt den Javascript-Dateipfad mit einem MD5-Hash der Datei an. SoHinzufügen von URL-Parameter zu CSS-Datei in ASP-Themen-Ordner

<script src="../Javascript/Navigation.js" type="text/javascript"></script> 

wird

<script src="../Javascript/Navigation.js?md5=70D2B4D1F236C7E340D9152B9E4102C3" type="text/javascript"></script> 

Ich denke, das eine ziemlich gewöhnliche Sache ist (oder Varianten davon) zu tun. Was ich zu tun habe, ist, die CSS-Dateien im Ordner app_themes abzuholen und das Gleiche zu tun.

Wie komme ich rein und ändere die CSS-Links?

Antwort

6

können Sie einen Steuer Adapter verwenden, um ordentlich dieses Verhalten in die Seite zu injizieren, wie folgt:

public class PageAdapter : System.Web.UI.Adapters.PageAdapter 
{ 
    protected override void OnPreRender(System.EventArgs e) 
    { 
     foreach (var link in Page.Header.Controls.OfType<HtmlLink>().ToList()) 
      if (link.Attributes["type"].Equals("text/css", StringComparison.OrdinalIgnoreCase)) 
       if (link.Attributes["href"].Contains("/App_Themes/{0}/".Fill(Page.Theme), StringComparison.OrdinalIgnoreCase)) 
        /* process link */ 

     base.OnPreRender(e); 
    } 
} 

Sie es stecken kann als durch die Einsparung der folgenden in * .Browser Datei in den App_Browsers Ordner:

<browsers> 
    <browser refID="Default"> 
    <controlAdapters> 
     <adapter controlType="System.Web.UI.Page" 
       adapterType="PageAdapter" /> 
    </controlAdapters> 
    </browser> 
</browsers> 

Insgesamt denke ich Steuer Adapter ein leistungsfähiger AOP-ähnlicher Mechanismus zum Injizieren Verhalten int ist o Kontrolle/Seitenlebenszyklen; sie werden fast vollständig zugunsten der traditionellen Unterklassierung ignoriert.

1

Vermeiden Sie, das Rad zweimal zu erfinden, indem Sie stattdessen Combres verwenden. Ist alles, was Sie verlangen, und mehr!

2

Ich bin mit einem Problem konfrontiert, dass es css Eintrag in HTML-Markup auf jedem Postback wiederholt. zum Beispiel habe ich newabc.css. Der Code ändert es in newabc.css? v = 1. Wenn ich HTML-Quelle nach 5 Postback sehe, wird es 5 "newabc.css? V = 1" haben. also habe ich link.EnableViewState = False hinzugefügt, es funktioniert gut, aber ist es wirklich nötig?

+0

Ich hatte das gleiche Problem. In der Tat habe ich mehrere CSS-Dateien im Ordner App_Themes und nach einem Postback verweist die Seite auf die erste CSS-Datei auf allen Link-Tags im Kopf! Zum Beispiel: Ich habe a.css, b.css und c.css. Die Seite endet mit 3 Links zu allen, die auf a.css verweisen! Das Festlegen von EnableViewState auf false scheint das Update dafür zu sein. – AlbertVanHalen