88 votes

asp.net-mvc: symbole du rasoir '@' dans le fichier js

J'ai un fichier .csHtml -razor avec une fonction javascript qui utilise la fonction @Url.Content C # à l'intérieur de l'URL ajax.
Je souhaite déplacer cette fonction dans un fichier .js référencé depuis ma vue.

Le problème est que javascript ne "connaît" pas le symbole @ et n'analyse pas le code C #.
Est-il possible de référencer .js fichiers avec le symbole "@"?

87voto

Darin Dimitrov Points 528142

Vous pouvez utiliser les attributs HTML5 data-* . Supposons que vous souhaitiez effectuer une action lorsque vous cliquez sur un élément du DOM, tel qu'un div. Alors:

 <div id="foo" data-url="@Url.Content("~/foobar")">Click me</div>
 

et puis dans votre fichier javascript séparé, vous pouvez travailler discrètement avec le DOM:

 $('#foo').click(function() {
    var url = $(this).data('url');
    // do something with this url
});
 

De cette façon, vous pourriez avoir une séparation pure entre le balisage et le script sans avoir jamais besoin de balises côté serveur dans vos fichiers javascript.

19voto

gdoron Points 61066

Eh bien, je viens de trouver un moteur de rasoir sur une pépite qui le fait! La signification résout la syntaxe @ !
Son nom est RazorJS .

Le blog du propriétaire et des explications sur les capacités du paquet
Le paquet Nuget

10voto

gdoron Points 61066

Une façon de résoudre le problème est la suivante:

Ajouter une vue partielle avec les fonctions javascript à la vue.
De cette façon, vous pouvez utiliser le symbole @ et toutes vos fonctions javascript sont séparées de la vue.

9voto

Aliostad Points 47792

Vous avez deux options:

  • Utiliser la valeur d'un paramètre dans la fonction et le fil dans la vue
  • Créer un espace de noms (au lieu de public niveau de la variable qui est considéré comme une mauvaise pratique en JS) et de définir cette valeur en haut de la page et ensuite l'utiliser dans votre js

Par exemple:

 var MyCompany = 
 {
   MyProject: {
                  MyVariable:""
               }
  };

Et puis, à votre avis, le configurer:

MyCompany.MyProject.MyVariable = @....

Mise à JOUR

Vous pourriez vous demander aucun n'est une bonne raison de couplage, eh bien, il est vrai, vous êtes de couplage js et la vue. C'est pourquoi, les scripts doivent être insensible à l'endroit où ils sont en cours d'exécution en tant qu'il est un symptôme de la non-organisation optimale de fichiers.

De toute façon il y a une troisième option pour créer un moteur d'affichage et d'exécuter les fichiers js contre la lame de rasoir et envoie les résultats. C'est plus propre, mais beaucoup plus lent donc pas recommandé.

7voto

Joel Etherton Points 24155

Pour obtenir la variable @ dans votre fichier .js, vous devez utiliser une variable globale et définir la valeur de cette variable à partir de la vue mvc qui utilise ce fichier .js.

Fichier JavaScript:

 var myValue;

function myFunc() {
  alert(myValue);
}
 

Fichier MVC View:

 <script language="text/javascript">
    myValue = @myValueFromModel;
</script>
 

Assurez-vous simplement que tous les appels de votre fonction se produisent APRÈS que la valeur ait été définie par la vue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X