web-dev-qa-db-fra.com

Exécuter conditionnellement JavaScript dans la vue Razor

Je voudrais exécuter un morceau de JavaScript lorsqu'une certaine condition est vraie dans mon modèle de vue:

<script type="text/javascript">
    @if (Model.Employees.Count > 1)
    {
        executeJsfunction();
    }
</script>

Ce code ne compile pas, comment dois-je faire cela?

22
ngruson

Essayez avec ceci:

<script type="text/javascript">
    @if (Model.Employees.Count > 1)
    {
        @:executeJsfunction();
    }
</script>

Noter la " @: "

36
thepirat000

Utilisez le bloc js if-else, pas C #. Js a son propre bloc if-else.

<script type="text/javascript">
if (@Model.Employees.Count > 1)
{
    executeJsfunction();
}
</script>
13

Si vous avez un système JS plus complexe, vous pouvez effectuer les opérations suivantes (les balises de script, ou n’importe laquelle, dans un @if ne nécessitant pas d’échappement supplémentaire):

@if (Model.Employees.Count > 1)
{
    <script type="text/javascript">
        $(function() {
            executeJsfunction();
        });
    </script>
}
10
Clay Lenhart

Pour un script multiligne dans le bloc conditionnel rasoir, vous pouvez utiliser:

<script type="text/javascript">
    @if (Model.Employees.Count > 1)
    {
       <text>
            executeJsfunctionOne();
            executeJsfunctionTwo();
            executeJsfunctionThree({
               "var_one": true,
               "var_two": false
            });
       </text>
    }
</script>

Cela peut le rendre plus propre et plus pratique que d'ajouter @: à chaque ligne. Tout ce qui se trouve dans les blocs <text></text> est rendu sous forme de script.

4
RickL

Je connais cette question postée il y a cependant cependant j'ai ajouté une nouvelle solution comme solution alternative: 

vous pouvez injecter votre valeur du modèle dans l'attribut de données de l'élément sélectionné du DOM et valider votre condition en vérifiant la valeur du même attribut de données que vous avez injecté lors de la création de votre vue.

par exemple, consultez la vue suivante et l'extrait de code de script pour savoir comment procéder: 

<div id="myDiv" data-count="@Model.Employees.Count">
</div>


<script>

  if($("#myDiv").data("count") > 1){
    executeJsfunction();
  }

</script>
0
msoliman

Si vous ne voulez même pas rendre le script Java en fonction de certaines conditions 

définir une section dans votre layout html

<html> 
<body>  
   @RenderSection("xyz", required: false) 
</body> 
</html>

à votre avis 

@if (Model.Condition)
{
   @section xyz{
      <script>
        $(function () {
             // Your Javascript
         });
    </script>
   }
}

Dans mon cas, je ne souhaite pas exposer mon code Javascript si cette fonctionnalité n'est pas activée, cela réduira également la taille de la page. 

0
dnxit