2011-01-04 13 views
3

Wie Sie alle wissen, enthält ASP.NET jedes CSS Stylesheet im Themenordner von App_Themes innerhalb der Seite. Keine Diskussion.ASP.NET Themes und statische Inhalte

Aber jetzt habe ich ein kleines Problem mit vielen CSS-Dateien in einem Thema und bereit, eine static content domain zu verwenden. Ich würde gerne den gesamten statischen Inhalt meiner Website aus der statischen Domäne laden (nicht nur CSS, sondern auch Icons, Bilder, etc.), aber lasst uns jetzt nur auf CSS achten.

Meine Frage ist

Ist es möglich, das Verhalten von Page Klasse außer Kraft zu setzen, und für jede CSS-Datei in Theme-Ordnern, schreiben den <link>-Tag mit der richtigen URL des statischen Inhaltsdomäne gefunden? Ich habe nichts, was mich daran hindert, Dateien in den Pfad http://static.domain.com/App_Themes/Theme zu deployen, also ist es zumindest in Ordnung, dem Tag ein Präfix hinzuzufügen.

Vielen Dank im Voraus.

+0

Interessante Frage! – Greg

Antwort

0

Eine alternative Methode besteht darin, ein HTTP-Modul zu schreiben. Lassen Sie das Modul den HTML-Code überprüfen, der an den Client gesendet wird.

Wenn es eine Stylesheet-Referenz erkennt, ändern Sie den Speicherort, an dem das Stylesheet zieht.

Dies funktioniert auch für die anderen Elemente, wie Bilder usw.

+0

Whoa !!! Scheint haben wir heute einen Gewinner !!! Ich habe über so etwas nachgedacht (was ich in PHP getan habe, um URLs neu zu schreiben), aber ich dachte nicht, dass ein HttpModule den ausgehenden HTML-Code überprüfen könnte! An welches HttpApplication-Ereignis sollte ich mich wenden? –

+0

Problem Endanforderung. Sie möchten den HTML-Code auf dem Weg nach draußen ändern. http://blog.tylerholmes.com/2008/09/httpmodules-your-best-friend.html – NotMe

1

Ja, Sie können. Sie können eine benutzerdefinierte Basisseitenklasse erstellen, um die CSS-Dateien zu schreiben, die im Ordner gefunden werden. Obwohl ich nicht sicher bin, ob Sie das Standardverhalten des Themes-Features überschreiben können, ist es am einfachsten, die CSS-Dateien außerhalb der Standardthemen zu verschieben. Anschließend können Sie die System.IO-Objekte verwenden, um das Verzeichnis zu lesen, auf die Datei zuzugreifen und die Verknüpfung zu generieren.

HTH.

+0

Sicher ist es als Ad-hoc-Lösung möglich. Aber ich weiß nicht, wie schwierig es ist, * Legacy * -Anwendungen zu pflegen (sobald sie alle eine gemeinsame Basis-Page-Klasse haben), die weitestgehend auf Themes basieren, die zur Laufzeit gewechselt werden können. Ich werde weiterhin den Code von ASP.NET und Mono studieren, um Hinweise zu finden;) –

+0

Sicherlich ist Ihre Lösung die ** einzige ** praktikable Lösung. Bei der Analyse des ASP.NET-Codes habe ich festgestellt, dass viele der benötigten Klassen/Methoden intern sind. PageTheme-Klasse ist eine abstrakte Klasse, aber ich fand keine Möglichkeit, sie zu überschreiben, aber ** am wichtigsten ** ihre SetStyleSheet-Methode ist ** internal **. Danke trotzdem für die Hilfe. Ich wollte etwas Größeres und besser skalierbares machen. –