Je crois que tout le monde a essayé d'utiliser JavaScript dans une vue, et vous pouvez utiliser directement la syntaxe du rasoir pour appeler certaines méthodes de .NET. Comme le code suivant est imbriqué dans une vue de rasoir:
<script> var currdate = '@ datetime.now'; // appelle directement la méthode .net console.log (currdate) </cript>
Mais une autre situation est que si je veux utiliser Razor dans un fichier JS distinct, la méthode ci-dessus ne fonctionnera pas, car MVC n'interprétera pas directement le fichier JS, et il ne peut être mis que dans la vue de rasoir. Cependant, je vous recommande ici une bibliothèque tierce, ce qui vous permet d'utiliser un rasoir directement dans des fichiers JS indépendants
Le nom de cette bibliothèque est Razorjs. Il s'agit d'un projet open source. Vous pouvez télécharger le code source à partir de l'adresse suivante:
https://bitbucket.org/djsolid/razorjs
Ou vous pouvez l'installer directement via Nuget:
PM> Razorjs d'installation d'installation
Ok, parlons de ce que cette bibliothèque peut nous apporter en premier. Après l'installation, vous pouvez utiliser directement toutes les méthodes prises en charge .NET dans le fichier JS. Par exemple, le code ci-dessus peut être directement placé dans un fichier JS indépendant à utiliser. De plus, vous pouvez également vous référer à l'espace de noms complet de .NET dans le fichier JS. Si vous souhaitez appeler l'objet de fichier pour lire le contenu du fichier texte, vous pouvez vous référer directement à l'espace de noms System.io:
@using System.io; var s = 'bonjour à @ dateTime.now / n @ file.readallText (System.web.hosting.hostingenvironment.mappath ("~ / web.config")))';Après l'exécution, vous pouvez obtenir directement tout le contenu du fichier web.config dans JS. Ça a l'air plutôt bien, haha. Alors, comment fonctionne exactement ce type de bibliothèque? En fait, il utilise une bibliothèque de classe appelée RazorEngine pour réaliser les effets ci-dessus. Razorine est un moteur d'explication du rasoir qui est très puissant et je l'ai déjà utilisé dans certains projets. Grâce à ce moteur, vous pouvez même utiliser la syntaxe de rasoir directement sous forme WIN. Haha, je me demande si vous avez une idée de ses avantages?
Eh bien, bien, avec ce moteur, vous pouvez utiliser le rasoir de MVC dans un environnement Web complètement indépendant. Cette fonction vous permet de fabriquer des modèles flexibles très facilement, comme certains modèles de messagerie. Vous pouvez utiliser directement diverses méthodes .NET ou même objets personnalisés dans le modèle, puis générer dynamiquement le contenu souhaité. OK, mais ce moteur n'est pas ce que je veux présenter cette fois, j'en parle juste ici
Ensuite, parlons de l'utilisation de Razorjs. Si vous l'installez directement via NuGet, vous configurerez automatiquement web.config pour vous. Il s'agit de la méthode d'installation recommandée. Sinon, vous devez ajouter la configuration dans web.config vous-même. Il y a plusieurs endroits, et je n'entrerai pas dans les détails ici. Vous pouvez le comparer après l'avoir installé. Il est également très simple d'utiliser les Razorjs, se référez-vous simplement au fichier JS que vous souhaitez utiliser la syntaxe suivante:
<p> @ html.razorjsinline ("~ / scripts / example.js") </p>Cependant, une chose à noter est qu'il y aura un répertoire dans votre web.config qui permet à Razorjs d'utiliser, c'est-à-dire que votre fichier JS doit être placé dans ce répertoire avant de pouvoir utiliser cette méthode pour faire référence:
<RazorJSettings handlerPath = "~ / razorjs.axd"> <lateledpaths> <add path = "~ / scripts" /> </ allowerpaths> </razorjSettings>
La dernière chose dont je veux parler, ce sont ses limites. Il y a de bonnes choses et de mauvais côtés. Puisqu'il utilise RazorEngine, vous ne pouvez pas utiliser la méthode HTML Helper de MVC dans JS, c'est-à-dire toutes les méthodes commençant par @HTML. Un autre problème est qu'il ne peut pas reconnaître le code de commentaire dans JS. Autrement dit, si vous utilisez des méthodes .NET dans les commentaires, il sera également exécuté. Si votre méthode est correcte, il n'y aura pas de problème. Sinon, l'exécution de JS sera interrompue et une erreur sera signalée directement. Alors ne pensez pas que la méthode inutile suffit à commenter.
En ce qui concerne le problème de ne pas pouvoir exécuter @html helper, je fournis une autre solution ici, mais cela vous permet de modifier son code source. Les amis qui veulent lancer peuvent l'essayer. En fait, vous pouvez utiliser de nombreuses méthodes personnalisées pour ce faire, ce qui est plus flexible et pratique. Après avoir téléchargé le code source Razorjs, vous pouvez le modifier directement et recompiler une DLL. Une autre façon consiste à utiliser son code source comme autre projet et à l'ajouter directement à votre propre projet.
Dans son code source, ouvrez le fichier htmltemplatebase.cs, et vous pouvez ajouter vos propres méthodes ici, puis toutes les méthodes ajoutées ici peuvent être appelées directement dans JS. Si vous pouvez trouver une méthode HREF encapsulée dans le code source, vous pouvez convertir l'URL en URL disponible sur le client demandeur. Selon cette méthode d'écriture, nous pouvons ajouter nos propres méthodes, telles que ce qui suit est ma méthode pour encapsuler un fichiers de ressources internationales à obtenir dynamiquement, afin que nous puissions utiliser directement des fichiers de ressources .NET dans JS pour l'internationalisation:
classe publique htmlTemplateBase: templateBase {// Appelez manuellement le gestionnaire de fichiers de ressources privés 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) {Return Language associé basé sur Key Return Resources.getString (Langkey); } UrlHelper Urlper URL {get; ensemble; }}Ensuite, appelez-le directement dans JS:
var s = '@getlangtext ("coderblog")'; console.log (s);Après l'exécution, vous pouvez saisir directement le contenu de la touche Codeblog dans JS.