J'ai un .csHtml
fichier -razor avec une fonction javascript qui utilise la @Url.Content
fonction C # à l'intérieur pour l'URL ajax.
Je souhaite déplacer cette fonction vers un .js
fichier référencé de ma vue.
Le problème est que javascript ne "connaît" pas le @
symbole et n'analyse pas le code C #.
Existe-t-il un moyen de référencer des .js
fichiers depuis une vue avec le symbole "@"?
c#
javascript
asp.net-mvc
asp.net-mvc-3
razor
gdoron soutient Monica
la source
la source
Réponses:
Vous pouvez utiliser des
data-*
attributs HTML5 . Supposons que vous souhaitiez effectuer une action lorsqu'un élément DOM tel qu'un div est cliqué. Alors:puis dans votre fichier javascript séparé, vous pouvez travailler discrètement avec le DOM:
De cette façon, vous pourriez avoir une séparation pure entre le balisage et le script sans jamais avoir besoin de balises côté serveur dans vos fichiers javascript.
la source
Eh bien, je viens de trouver un moteur de rasoir sur nuget qui le fait! Le sens résout la
@
syntaxe!Son nom est RazorJS .
Le paquet Nuget
Mise à jour 2016:
le package n'a pas été mis à jour pendant 5 ans et le lien du site du projet est mort. Je ne recommande plus aux gens d'utiliser cette bibliothèque.
la source
Une façon d'aborder le problème est:
Ajout d'une vue partielle avec les fonctions javascript à la vue.
De cette façon, vous pouvez utiliser le
@
symbole et toutes vosjavascript
fonctions sont séparées de la vue.la source
Vous avez deux options:
Par exemple:
Et puis à votre avis, définissez-le:
METTRE À JOUR
Vous pourriez vous demander qu'aucun n'est bon à cause du couplage, eh bien c'est vrai, vous couplez js et view. C'est pourquoi les scripts doivent ignorer l'emplacement dans lequel ils s'exécutent, c'est donc le symptôme d'une organisation non optimale des fichiers.
Quoi qu'il en soit, il existe une troisième option pour créer un moteur de visualisation et exécuter les fichiers js contre le rasoir et renvoyer les résultats. C'est plus propre mais beaucoup plus lent donc pas recommandé non plus.
la source
Afin d'obtenir la
@
variable dans votre fichier .js, vous devrez utiliser une variable globale et définir la valeur de cette variable à partir de la vue mvc qui utilise ce fichier .js.Fichier JavaScript:
Fichier MVC View:
Assurez-vous simplement que tous les appels à votre fonction se produisent APRÈS que la valeur ait été définie par la vue.
la source
Ce n'est probablement pas la bonne approche. Considérant la séparation des préoccupations. Vous devriez avoir un
data injector
sur votreJavaScript
classe et qui est dans la plupart des cas des donnéesJSON
.Créez un fichier JS dans votre
script
dossier et ajoutez cette référence à votreView
Maintenant, considérez une
JavaScript
classe littérale dans votreyourJsFile.js
:Déclarez également une classe
Maintenant,
Action
faites ceci:Et de votre point de vue:
la source
J'ai récemment publié un blog sur ce sujet: Générer des fichiers JavaScript externes à l'aide de vues Razor partielles .
Ma solution consiste à utiliser un attribut personnalisé (
ExternalJavaScriptFileAttribute
) qui restitue une vue partielle de Razor telle quelle, puis la renvoie sans les<script>
balises environnantes . Cela en fait un fichier JavaScript externe valide.la source
J'enveloppe généralement JS ayant besoin d'accéder aux propriétés du modèle, dans les fonctions, puis je passe le @ quelque chose dans la vue. Par exemple
dans la vue, j'ajoute l'invocation de fonction via (juste un exemple):
la source
Je pense que vous êtes obligé de mettre ce code JS dans la vue. L'analyseur Razor, pour autant que je sache, ne regardera pas les fichiers .js, donc tout ce que vous avez qui utilise
@
ne fonctionnera pas. PLus, comme vous l'avez remarqué, Javascript lui-même n'aime pas ce@
caractère traîner sans raison, à part, disons, dans une chaîne.la source