Ich glaube, jeder hat versucht, JavaScript in einer Ansicht zu verwenden, und Sie können die Razor -Syntax direkt verwenden, um einige Methoden von .NET aufzurufen. Da der folgende Code in einer Rasieransicht verschachtelt ist:
<Script> var currdate = '@datetime.now'; // Rufen Sie direkt die .NET -Methode console.log (currdate) </script> auf
Eine andere Situation ist jedoch, dass die obige Methode nicht funktioniert, wenn ich Razor in einer separaten JS -Datei verwenden möchte, da MVC die JS -Datei nicht direkt interpretiert und sie nur in die Rasieransicht versetzt werden kann. Hier empfehle ich Ihnen jedoch eine Bibliothek von Drittanbietern, mit der Sie Razor direkt in unabhängigen JS-Dateien verwenden können
Der Name dieser Bibliothek lautet Razorjs. Dies ist ein Open -Source -Projekt. Sie können den Quellcode aus der folgenden Adresse herunterladen:
https://bitbucket.org/djsolid/razorjs
Oder Sie können es direkt über Nuget installieren:
PM> Installationspackung Rasiermesser
OK, lassen Sie uns darüber sprechen, was diese Bibliothek zuerst zu uns bringen kann. Nach der Installation können Sie alle .NET -unterstützten Methoden in der JS -Datei direkt verwenden. Beispielsweise kann der obige Code direkt in eine unabhängige JS -Datei zur Verwendung platziert werden. Darüber hinaus können Sie sich auch auf den vollständigen Namespace von .NET in der JS -Datei beziehen. Wenn Sie das Dateiobjekt aufrufen möchten, um den Inhalt der Textdatei zu lesen, können Sie sich direkt auf den system.io -Namespace beziehen:
@use system.io; var
Nach dem Ausführen können Sie alle Inhalte in der Web.config -Datei in JS direkt abrufen. Es sieht ziemlich gut aus, haha. Wie genau funktioniert diese Art der Bibliothek? Tatsächlich verwendet es eine Klassenbibliothek namens Razorengine, um die oben genannten Effekte zu erzielen. Razorengine ist eine Rasierer -Erklärungsmotor, die sehr leistungsfähig ist, und ich habe sie zuvor in einigen Projekten verwendet. Über diesen Motor können Sie sogar Razor -Syntax direkt in Gewinnform verwenden. Haha, ich frage mich, ob Sie eine Vorstellung von seinen Vorteilen haben?
Gut, gut, mit dieser Engine können Sie MVCs Rasierer in einer völlig unabhängigen Webumgebung verwenden. Mit dieser Funktion können Sie einige flexible Vorlagen sehr bequem erstellen, z. B. einige E -Mail -Vorlagen. Sie können verschiedene .NET -Methoden oder sogar benutzerdefinierte Objekte in der Vorlage direkt verwenden und dann den gewünschten Inhalt dynamisch generieren. OK, aber dieser Motor ist nicht das, was ich dieses Mal vorstellen möchte, ich spreche hier nur darüber
Lassen Sie uns als nächstes über die Verwendung von Razorjs sprechen. Wenn Sie es direkt über Nuget installieren, konfigurieren Sie automatisch Web.config für Sie. Dies ist die empfohlene Installationsmethode. Andernfalls müssen Sie die Konfiguration in web.config selbst hinzufügen. Es gibt mehrere Orte, und ich werde hier nicht auf Details eingehen. Sie können es nach der Installation vergleichen. Es ist auch sehr einfach, RazorJs zu verwenden. Beziehen Sie sich einfach auf die JS -Datei, die Sie mit der folgenden Syntax möchten:
<p> @html.razorjsinline ("~/scripts/example.js") </p>Eine Sache zu beachten ist jedoch, dass es in Ihrem Web.config ein Verzeichnis gibt, mit dem RazorJs verwendet werden können, dh Ihre JS -Datei muss in dieses Verzeichnis platziert werden, bevor Sie diese Methode verwenden können, um zu referenzieren:
<RazorjsSettings HandlerPath = "~/razorjs.axd"> <erlaubtePaths> <add path = "~/scripts"/> </erlaubtPaths> </razorjsSettings>
Das Letzte, worüber ich sprechen möchte, sind seine Grenzen. Es gibt gute Dinge und schlechte Seiten. Da es Razorengine verwendet, können Sie die HTML -Helfermethode von MVC in JS nicht verwenden, dh alle Methoden, die mit @HTML beginnen. Ein weiteres Problem ist, dass es den Kommentarcode in JS nicht erkennen kann. Das heißt, wenn Sie in den Kommentaren .NET -Methoden verwenden, wird es auch ausgeführt. Wenn Ihre Methode korrekt ist, wird es kein Problem geben. Andernfalls wird die Ausführung von JS unterbrochen und ein Fehler direkt gemeldet. Denken Sie also nicht, dass die nutzlose Methode ausreicht, um sich zu äußern.
In Bezug auf das Problem, @HTML -Helfer nicht auszuführen, biete ich hier eine andere Lösung an, ermöglicht es Ihnen jedoch, den Quellcode zu ändern. Freunde, die werfen wollen, können es versuchen. Tatsächlich können Sie dazu viele benutzerdefinierte Methoden verwenden, was flexibler und bequemer ist. Nach dem Herunterladen des RazorJS -Quellcode können Sie ihn direkt ändern und eine DLL neu kompilieren. Eine andere Möglichkeit besteht darin, seinen Quellcode als ein anderes Projekt zu verwenden und ihn direkt zu Ihrem eigenen Projekt hinzuzufügen.
Öffnen Sie in seinem Quellcode die Datei htmltemplateBase.cs und können hier Ihre eigenen Methoden hinzufügen. Anschließend können alle hier hinzugefügten Methoden in JS direkt aufgerufen werden. Wenn Sie eine eingekapselte HREF -Methode im Quellcode finden, können Sie die URL in eine URL konvertieren, die auf dem anforderenden Client verfügbar ist. Gemäß dieser Schreibmethode können wir unsere eigenen Methoden hinzufügen, z. B. die folgende Methode, um ein dynamisches Erhalten internationaler Ressourcendateien zu verkörpern, damit wir .NET -Ressourcendateien in JS für die Internationalisierung direkt verwenden können:
public class htmltemPlpaseBase: templateBase {// Rufen Sie den Ressourcendateimanager Private Static ResourceManager Ressourcen = (ResourceManager) System.Type.GetType ("Razorjs.resource"). GetProperty ("ResourceManager"). public htmltemplateBase () {url = new urlHelper (httpcontext.current.request.requestContext); } public String href (string originalurl) {return extensions.resolveurl (originalurl); } public String getLangText (String Langkey) {return verwandte Sprache basierend auf den wichtigsten Rückgaberessourcen.getString (Langkey); } public urlHelper url {get; Satz; }}Rufen Sie es dann direkt in JS an:
var s = '@getLangText ("coderblog")'; console.log (s);Nach dem Ausführen können Sie den Inhalt des Codierblog -Schlüssels in JS direkt eingeben.