Ich möchte meinen gesamten JavaScript-Code in einem Abschnitt behalten. kurz vor dem schließenden body
Tag auf meiner Master-Layout-Seite und ich frage mich nur, was ich am besten tun soll, im MVC-Stil.
Wenn ich beispielsweise eine DisplayTemplate\DateTime.cshtml
Datei erstelle , die die DateTime-Auswahl von jQuery UI verwendet, würde ich das JavaScript direkt in diese Vorlage einbetten, aber dann wird es in der Mitte der Seite gerendert.
In meinen normalen Ansichten kann ich nur @section JavaScript { //js here }
und dann @RenderSection("JavaScript", false)
in meinem Master-Layout verwenden, aber dies scheint in Anzeige- / Editor-Vorlagen nicht zu funktionieren - irgendwelche Ideen?
Antworten:
Sie können mit einer Verbindung von zwei Helfern fortfahren:
und dann in Ihrem
_Layout.cshtml
:und irgendwo in einer Vorlage:
quelle
sections
. In MVC4 könnte Bundling tatsächlich verwendet werden und hilft, die Größe von Skripten zu reduzieren.head
Tag anstatt am Ende desbody
Tags platzieren möchten , da er@Html.RenderScripts()
vor Ihrer Teilansicht und daher vorher ausgeführt wird@Html.Script()
.Geänderte Version von Darins Antwort, um die Bestellung sicherzustellen. Funktioniert auch mit CSS:
Sie können JS- und CSS-Ressourcen wie folgt hinzufügen:
Und rendern Sie JS- und CSS-Ressourcen wie folgt:
Sie können eine Zeichenfolgenprüfung durchführen, um festzustellen, ob sie mit einem Skript / Link beginnt, damit Sie nicht explizit definieren müssen, um welche Ressource es sich handelt.
quelle
Ich hatte das gleiche Problem, aber die hier vorgeschlagenen Lösungen eignen sich nur zum Hinzufügen von Verweisen auf die Ressource und sind für Inline-JS-Code nicht sehr geeignet. Ich fand einen sehr hilfreichen Artikel und wickelte alle meine Inline-JS (und auch Skript-Tags) ein
Und in der _Layout-Ansicht, die
@Html.PageScripts()
kurz vor dem Schließen des Tags 'body' platziert wurde. Funktioniert wie ein Zauber für mich.Die Helfer selbst:
quelle
Ich mochte die von @ john-w-harding gepostete Lösung , also kombinierte ich sie mit der Antwort von @ darin-dimitrov, um die folgende wahrscheinlich überkomplizierte Lösung zu erstellen, mit der Sie das Rendern von HTML (auch Skripten) innerhalb eines using-Blocks verzögern können.
VERWENDUNG
Schließen Sie in einer wiederholten Teilansicht den Block nur einmal ein:
Fügen Sie in einer (wiederholten?) Teilansicht den Block für jedes Mal ein, wenn der Teil verwendet wird:
Fügen Sie in einer (wiederholten?) Teilansicht den Block einmal ein und rendern Sie ihn später spezifisch nach Namen
one-time
:So rendern Sie:
CODE
quelle
Installieren Sie das Nuget- Paket Forloop.HtmlHelpers. Es enthält einige Hilfsprogramme zum Verwalten von Skripten in Teilansichten und Editorvorlagen.
Irgendwo in Ihrem Layout müssen Sie anrufen
Hier werden alle Skriptdateien und Skriptblöcke auf der Seite ausgegeben. Ich würde daher empfehlen, sie nach Ihren Hauptskripten im Layout und nach einem Skriptabschnitt (falls vorhanden) einzufügen.
Wenn Sie das Web Optimization Framework mit Bündelung verwenden, können Sie die Überladung verwenden
Damit wird diese Methode zum Schreiben von Skriptdateien verwendet.
Wenn Sie jetzt Skriptdateien oder -blöcke zu einer Ansicht, Teilansicht oder Vorlage hinzufügen möchten, verwenden Sie diese einfach
Die Helfer stellen sicher, dass nur eine Skriptdateireferenz gerendert wird, wenn sie mehrmals hinzugefügt wird, und sie stellen auch sicher, dass Skriptdateien in der erwarteten Reihenfolge gerendert werden, d. H.
quelle
Dieser Beitrag hat mir wirklich geholfen und ich dachte, ich würde meine Umsetzung der Grundidee veröffentlichen. Ich habe eine Hilfsfunktion eingeführt, die Skript-Tags zur Verwendung in der Funktion @ Html.Resource zurückgeben kann.
Ich habe auch eine einfache statische Klasse hinzugefügt, damit ich typisierte Variablen verwenden kann, um eine JS- oder CSS-Ressource zu identifizieren.
Und im Einsatz
Vielen Dank an @Darin Dimitrov, der die Antwort in meiner Frage hier geliefert hat .
quelle
Die Antwort in „ Rasiermesserabschnitt aus einem Teil mit dem
RequireScript
HtmlHelper füllen“ folgt demselben Muster. Es hat auch den Vorteil, dass doppelte Verweise auf dieselbe Javascript-URL gesucht und unterdrückt werden, und es verfügt über einen explizitenpriority
Parameter, mit dem die Reihenfolge gesteuert werden kann.Ich habe diese Lösung um Methoden erweitert für:
Ich mag die Lösungen von Darin & eth0, da sie die
HelperResult
Vorlage verwenden, die Skript- und CSS-Blöcke ermöglicht, nicht nur Links zu Javascript- und CSS-Dateien.quelle
Antworten von @Darin Dimitrov und @ eth0 zur Verwendung bei der Verwendung der Bundle-Erweiterung:
quelle