Ich habe eine .csHtml
-razor-Datei mit einer Javascript-Funktion, die die darin enthaltene @Url.Content
C # -Funktion für die Ajax-URL verwendet.
Ich möchte diese Funktion in eine .js
Datei verschieben, auf die aus meiner Sicht verwiesen wird.
Das Problem ist, dass Javascript das @
Symbol nicht "kennt" und den C # -Code nicht analysiert.
Gibt es eine Möglichkeit, .js
Dateien aus der Ansicht mit dem Symbol "@" zu referenzieren ?
c#
javascript
asp.net-mvc
asp.net-mvc-3
razor
Gdoron unterstützt Monica
quelle
quelle
Antworten:
Sie können HTML5-
data-*
Attribute verwenden. Angenommen, Sie möchten eine Aktion ausführen, wenn auf ein DOM-Element wie ein div geklickt wird. So:und dann könnten Sie in Ihrer separaten Javascript-Datei unauffällig mit dem DOM arbeiten:
Auf diese Weise können Sie eine reine Trennung zwischen Markup und Skript erzielen, ohne dass Sie jemals serverseitige Tags in Ihren Javascript-Dateien benötigen.
quelle
Nun, ich habe gerade einen Rasierermotor auf Nuget gefunden, der das macht! Bedeutung löst
@
Syntax!Es heißt RazorJS .
Das Nuget- Paket
Update 2016:
Das Paket wurde 5 Jahre lang nicht aktualisiert und der Link zur Projektsite ist tot. Ich empfehle nicht mehr, diese Bibliothek zu benutzen.
quelle
Eine Möglichkeit , das Problem anzugehen, ist:
Hinzufügen einer Teilansicht mit den Javascript-Funktionen zur Ansicht.
Auf diese Weise können Sie das
@
Symbol verwenden und alle Ihrejavascript
Funktionen werden von der Ansicht getrennt.quelle
Sie haben zwei Möglichkeiten:
Beispielsweise:
Und dann setzen Sie es aus Ihrer Sicht:
AKTUALISIEREN
Sie mögen sich fragen, ob keiner wegen der Kopplung etwas Gutes ist. Nun, es ist wahr, Sie koppeln js und view. Aus diesem Grund müssen Skripte den Speicherort, an dem sie ausgeführt werden, nicht kennen, damit es sich um einen handelt Symptom für eine nicht optimale Organisation von Dateien.
Auf jeden Fall gibt es eine dritte Option, um eine Ansichts-Engine zu erstellen und die js-Dateien gegen den Rasierer auszuführen und die Ergebnisse zurückzusenden. Dies ist sauberer, aber viel langsamer und wird daher auch nicht empfohlen.
quelle
Um die
@
Variable in Ihre .js-Datei aufzunehmen, müssen Sie eine globale Variable verwenden und den Wert dieser Variablen in der MVC-Ansicht festlegen, die diese .js-Datei verwendet.JavaScript-Datei:
MVC View-Datei:
Stellen Sie nur sicher, dass alle Aufrufe Ihrer Funktion erfolgen, nachdem der Wert in der Ansicht festgelegt wurde.
quelle
Wahrscheinlich ist dies nicht der richtige Ansatz. Berücksichtigung der Trennung von Bedenken. Sie sollten eine
data injector
in IhrerJavaScript
Klasse haben und das sind in den meisten Fällen DatenJSON
.Erstellen Sie eine JS-Datei in Ihrem
script
Ordner und fügen Sie diesen Verweis zu Ihrem hinzuView
Betrachten Sie nun eine
JavaScript
wörtliche Klasse in IhremyourJsFile.js
:Deklarieren Sie auch eine Klasse
Nun, von Ihnen aus
Action
tun Sie dies:Und aus Ihrer Sicht:
quelle
Ich habe kürzlich über dieses Thema gebloggt: Generieren externer JavaScript-Dateien mit partiellen Rasiermesseransichten .
Meine Lösung besteht darin, ein benutzerdefiniertes Attribut (
ExternalJavaScriptFileAttribute
) zu verwenden, das eine teilweise Razor-Ansicht unverändert rendert und sie dann ohne die umgebenden<script>
Tags zurückgibt . Das macht es zu einer gültigen externen JavaScript-Datei.quelle
Normalerweise verpacke ich JS, das Zugriff auf Modelleigenschaften benötigt, in Funktionen und übergebe dann das @something in der Ansicht. Beispielsweise
In der Ansicht füge ich einen Funktionsaufruf hinzu über (nur ein Beispiel):
quelle
Ich denke, Sie müssen diesen JS-Code nicht mehr in die Ansicht einfügen. Der Razor-Parser wird meines Wissens keine .js-Dateien anzeigen, daher funktioniert alles, was Sie verwenden
@
, nicht. PLus, wie Sie gesehen haben, mag Javascript selbst dieses@
Zeichen nicht ohne Grund, außer zum Beispiel in einer Zeichenfolge.quelle