Heim > Artikel > Web-Frontend > Bringen Sie Ihnen bei, wie Sie die .Net MVC Razor-Syntax in Javascript-Dateien verwenden_Javascript-Kenntnisse
Ich glaube, jeder hat versucht, Javascript in einer Ansicht zu verschachteln. Derzeit können Sie einige .NET-Methoden direkt mit der Razor-Syntax aufrufen. Beispielsweise ist der folgende Code in einer Razor-Ansicht verschachtelt:
<script> var currDate = '@DateTime.Now'; //直接调用.NET的方法 console.log(currDate) </script>
Eine andere Situation ist jedoch, dass die obige Methode nicht möglich ist, wenn ich Razor in einer unabhängigen JS-Datei verwenden möchte, da MVC die JS-Datei nicht direkt interpretiert und nur in der Razor-Ansicht platziert werden kann. Hier empfehle ich jedoch eine Bibliothek eines Drittanbieters, mit der Sie Razor direkt in einer eigenständigen JS-Datei verwenden können
Der Name dieser Art von Bibliothek ist RazorJS. Dies ist ein Open-Source-Projekt. Sie können den Quellcode unter der folgenden Adresse herunterladen
https://bitbucket.org/djsolid/razorjs
Oder Sie können es direkt über Nuget installieren:
PM> Install-Package RazorJS
@using System.IO; var s = 'Hello at @DateTime.Now \n @File.ReadAllText(System.Web.Hosting.HostingEnvironment.MapPath("~/web.config"))';
Nun, das ist gut. Mit dieser Engine können Sie MVCs Razor völlig unabhängig von der Webumgebung verwenden. Mit dieser Funktion können Sie ganz einfach einige flexible Vorlagen erstellen, z. B. einige E-Mail-Vorlagen. Verwenden Sie verschiedene .NET-Methoden oder sogar benutzerdefinierte Objekte und generieren Sie dynamisch, was Sie wollen. OK, aber diese Engine ist nicht das, was ich dieses Mal vorstellen möchte. Ich spreche hier nur darüber
Lassen Sie uns als Nächstes darüber sprechen, wie Sie RazorJS verwenden. Wenn Sie es direkt über Nuget installieren, wird web.config automatisch für Sie konfiguriert. Andernfalls müssen Sie es selbst zu web.config hinzufügen. Es gibt mehrere Stellen in der Konfiguration, die hier nicht näher beschrieben werden. Sie können sie nach der Installation vergleichen. Die Verwendung von RazorJS ist ebenfalls sehr einfach. Verwenden Sie einfach die folgende Syntax, um auf die gewünschte JS-Datei zu verweisen:
<p> @Html.RazorJSInline("~/Scripts/Example.js") </p>
<razorJSSettings handlerPath="~/razorjs.axd"> <allowedPaths> <add path="~/Scripts" /> </allowedPaths> </razorJSSettings>
Bezüglich des Problems, dass der @Html-Helper nicht ausgeführt werden kann, stelle ich hier eine andere Lösung zur Verfügung, aber diese kann den Quellcode ändern. Freunde, die sich damit anlegen möchten, können es versuchen. Tatsächlich können Sie hierfür auch viele benutzerdefinierte Methoden verwenden, was flexibler und bequemer ist. Nachdem Sie den RazorJS-Quellcode heruntergeladen haben, können Sie ihn direkt ändern und eine DLL neu kompilieren. Eine andere Methode besteht darin, den Quellcode als ein anderes Projekt zu behandeln und ihn direkt Ihrem eigenen Projekt hinzuzufügen.
Öffnen Sie im Quellcode die Datei HtmlTemplateBase.cs. Sie können hier Ihre eigenen Methoden hinzufügen und die hier hinzugefügten Methoden können direkt in JS aufgerufen werden. Im Quellcode finden Sie beispielsweise eine gekapselte Href-Methode, die die URL in eine URL umwandelt, die auf dem anfordernden Client verfügbar ist. Gemäß dieser Schreibmethode können wir unsere eigenen Methoden hinzufügen. Im Folgenden kapsele ich beispielsweise eine Methode zum dynamischen Abrufen internationalisierter Ressourcendateien, sodass .NET-Ressourcendateien direkt in JS für die Internationalisierung verwendet werden können:
public class HtmlTemplateBase : TemplateBase { //手工调用资源文件管理器 private static ResourceManager resources = (ResourceManager)System.Type.GetType ("RazorJS.Resource").GetProperty("ResourceManager").GetValue(null, null); public HtmlTemplateBase() { Url = new UrlHelper(HttpContext.Current.Request.RequestContext); } public string Href(string originalUrl) { return Extensions.ResolveUrl(originalUrl); } public string GetLangText(string langKey) { 根据key返回相关的语言 return resources.GetString(langKey); } public UrlHelper Url { get; set; } }
var s = '@GetLangText("CoderBlog")'; console.log(s);