Frage

Wir haben eine ziemlich komplexe Anwendung, die zuvor WebForms wurde. Wir sind in dem Prozess von Bits davon von Grund auf mit MVC Umschreiben. Unsere Anwendung besteht aus einer Reihe von Widgets, die zusammen die Funktionalität der Anwendung bilden.

In WebForms verwenden wir Benutzersteuerelemente. Jedes Benutzersteuerelement würde seine CSS und JavaScript mit Hilfe einer Sammlung registrieren, die in HttpContext.Current.Items gespeichert wurden. Dass die Sammlung würde dann die Ausgabe als eine einzige Anforderung zusammengefügt werden. Typischerweise in dem Ereignis Page Load auftreten würde dies, und die beinhaltende Seite würde dann ein Skript-Tag rendern, die alle JavaScript und CSS für diese Seite benötigt werden, enthalten würde.

Wir haben zu kämpfen mit dem gleichen in MVC zu tun. Wir verwenden eine Reihe von Ansichten innerhalb einer Masterpage die Widgets zu imitieren. Jedes Widget hat einen eigenen Controller, so kann die Funktionalität ausreichend getrennt sein. Die Masterpage baut die Widgets auf der Seite mit Render von MVC-Futures auf. Ursprünglich waren wir mit den gleichen Registrierungsverfahren für die CSS / JS-Dateien. Jeder Controller würde seine erforderlichen Dateien in einem Aktions registrieren. Die Dateien würden dann in der HttpContext.Current.Items Sammlung enthalten sein, und würde auf die Seite gerendert wird. Um dies zu erleichtern, schrieb ich eine Htmlhelper Erweiterung die Links / Scripts, um die Seite zu machen. Es sieht wie folgt aus:

<%= Html.GetRegisteredCssFiles() %>

Das Problem ist, dass MVC einen Top-down-Ansatz verwendet. Dieser Aufruf wird in dem Tag der Seite gemacht, aber unsere nachfolgenden Aufrufe Render unten passieren. Durch die Zeit Render genannt wird und die erforderlichen Dateien werden in HttpContext.Current.Items registriert, wird der Code oben bereits ausgeführt. So wird die Sammlung nicht zur richtigen Zeit geändert.

Hat jemand irgendwelche Ideen, wie wir dies werden die Konstruktion sollte? Ich bin auf der Suche nach Antworten, die Best Practices für die MVC integrieren.

War es hilfreich?

Lösung

Diese Frage wurde viel Zeit gefragt, vor, also wahrscheinlich haben Sie mit diesem bereits behandelt. Aber für zukünftige Besucher, vielleicht wird diese Lösung hilfreich sein: http://marcinbudny.blogspot.com/2010/01/handling -stylesheet-Referenzen-in.html

Andere Tipps

Die Freie Telerik MVC-Tools haben ein Skript und eine Art Register, das vielleicht tun, was Sie wollen ...

Nicht sicher, ob dies eine machbare Lösung für Sie, aber versuchen, diesen Anruf an die Unterseite jeder Seite bewegt.

Ich habe immer eingeschlossen mein Javascript und CSS-Dateien im HTML-HEAD, so dass ich weiß nicht, ob es weiter unten funktionieren würde. Meine Vermutung ist, dass es in den meisten Browsern funktionieren werden, aber Sie könnten zufällige Probleme in einigen haben.

Die Alternative ist GetRegisteredFiles () -Ausgabe einige Javascript zu haben, die die CSS-Dateien an der richtigen Stelle (via DOM-Manipulation) lädt.

Das Problem mit einem dieser Lösungen ist, dass die Dateien nicht bis zum Ende enthalten sind, die die Seite schauen „plain“ führen könnten, bis die CSS heruntergeladen wird.

Alternativ könnte die Steuerung vorhersagen, welche „Widgets“ erhalten geladen und geben diese Daten an die Master-Seite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top