Quel est le meilleur endroit (quel dossier, etc.) pour placer des fichiers JavaScript spécifiques à la vue dans une application ASP.NET MVC?
Pour garder mon projet organisé, j'aimerais vraiment pouvoir les mettre côte à côte avec les fichiers .aspx de la vue, mais je n'ai pas trouvé un bon moyen de les référencer en faisant cela sans exposer les ~ / Views / Action / structure des dossiers. Est-ce vraiment une mauvaise chose de laisser fuir les détails de cette structure de dossiers?
L'alternative est de les mettre dans les dossiers ~ / Scripts ou ~ / Content, mais c'est une irritation mineure car maintenant je dois m'inquiéter des conflits de noms de fichiers. C'est une irritation que je peux surmonter, cependant, si c'est «la bonne chose».
la source
Réponses:
Ancienne question, mais je voulais mettre ma réponse au cas où quelqu'un d'autre viendrait la chercher.
Je voulais aussi mes fichiers js / css spécifiques à la vue dans le dossier views, et voici comment je l'ai fait:
Dans le dossier web.config à la racine de / Views, vous devez modifier deux sections pour permettre au serveur Web de servir les fichiers:
Ensuite, à partir de votre fichier de vue, vous pouvez référencer les URL comme vous le souhaitez:
Cela permettra de servir des fichiers .js et .css, et interdira de servir quoi que ce soit d'autre.
la source
Une façon d'y parvenir est de fournir le vôtre
ActionInvoker
. En utilisant le code inclus ci-dessous, vous pouvez ajouter au constructeur de votre contrôleur:Désormais, chaque fois que vous placez un
.js
fichier à côté de votre vue:Vous pouvez y accéder directement:
Voici la source:
la source
Vous pouvez inverser la suggestion de davesw et bloquer uniquement .cshtml
la source
Site.Master
. La liste blanche semble l'approche la plus sûreJe sais que c'est un sujet assez ancien, mais j'aimerais ajouter quelques éléments. J'ai essayé la réponse de davesw mais cela lançait une erreur 500 en essayant de charger les fichiers de script, donc j'ai dû ajouter ceci au web.config:
à system.webServer. Voici ce que j'ai, et j'ai pu le faire fonctionner:
Voici plus d'informations sur la validation: https://www.iis.net/configreference/system.webserver/validation
la source
ajoutez ce code dans le fichier web.config à l'intérieur de la balise system.web
la source
Je voulais également placer les fichiers js liés à une vue dans le même dossier que la vue.
Je n'ai pas pu faire fonctionner les autres solutions de ce fil, non pas qu'elles soient cassées, mais je suis trop novice dans MVC pour les faire fonctionner.
En utilisant les informations données ici et plusieurs autres piles, j'ai trouvé une solution qui:
Remarque: j'utilise également le routage d'attributs HTTP. Il est possible que l'itinéraire utilisé dans mon âme puisse être modifié pour fonctionner sans l'activer.
Compte tenu de l'exemple de structure de répertoire / fichier suivant:
En utilisant les étapes de configuration ci-dessous, combinées à l'exemple de structure ci-dessus, l'URL de la vue de test serait accessible via:
/Example/Test
et le fichier javascript serait référencé via:/Example/Scripts/test.js
Étape 1 - Activer le routage d'attributs:
Modifiez votre fichier /App_start/RouteConfig.vb et ajoutez
routes.MapMvcAttributeRoutes()
juste au-dessus des routes existantes.Étape 2 -Configurez votre site pour traiter et traiter /{controller}/Scripts/*.js comme un chemin MVC et non comme une ressource statique
Modifiez votre fichier /Web.config, en ajoutant ce qui suit à la section system.webServer -> handlers du fichier:
Le voici encore avec le contexte:
Étape 3 - Ajoutez le résultat de l'action de scripts suivant à votre fichier Controller
Vous devrez le copier dans chacun de vos fichiers Controller. Si vous le souhaitez, il existe probablement un moyen de le faire en tant que configuration de route unique et unique.
Pour le contexte, voici mon fichier ExampleController.vb:
Notes finales Il n'y a rien de spécial à propos des fichiers javascript test.vbhtml view / test.js et ne sont pas affichés ici.
Je garde mon CSS dans le fichier de vue mais vous pouvez facilement ajouter à cette solution afin que vous puissiez référencer vos fichiers CSS de la même manière.
la source