Me gustaría ejecutar un trozo de código JavaScript cuando una determinada condición es verdadera, en mi opinión, modelo:

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

Este código no compila, ¿cómo debo hacerlo?

InformationsquelleAutor ngruson | 2012-11-23

6 Comentarios

  1. 39

    Probar con este:

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

    Nota el «@:«

    • No funciona, todavía se ejecuta la función incondicionalmente
  2. 14

    Usar js if-else bloque, no en C#. Js tiene su propio if-else bloque.

    <script type="text/javascript">
    if (@Model.Employees.Count > 1)
    {
        executeJsfunction();
    }
    </script>
    • El problema con esto es que usted exponga la condición, que puede estar bien en algunos casos, pero si usted necesita salida de secuencia de comandos para que sólo los administradores, en lugar de menos privilegiados de usuario, por ejemplo, usted no desea exponer la funcionalidad.
  3. 11

    Si usted tiene más complicado JS, puede hacer lo siguiente (etiquetas de secuencia de comandos, o las etiquetas, dentro de un @en caso de no necesitar extra de escape):

    @if (Model.Employees.Count > 1)
    {
        <script type="text/javascript">
            $(function() {
                executeJsfunction();
            });
        </script>
    }
    • Sólo quiero añadir mi $0.02 aquí — Esto funciona muy bien, y para mí el punto clave fue el <script> etiqueta necesita para comenzar a en el bloque condicional. Si pongo la <script> etiqueta fuera de él, y sólo había un bloque de JS dentro de la condicional, la máquina de Afeitar motor trató de analizarlo como C# y vomitó.
  4. 6

    Para multi-línea secuencia de comandos dentro de la maquinilla de afeitar bloque condicional, se puede utilizar:

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

    Esto puede hacer que sea más limpio y más práctico que añadir @: para cada línea. Todo dentro de la <text></text> bloques se representa como script.

  5. 0

    Sé que esta pregunta publicado hace tiempo, sin embargo he añadido una nueva solución como una solución alternativa:

    puede inyectar su valor a partir del modelo de datos de atributo seleccionado de DOM del elemento y validar su condición comprobando el valor de los mismos datos de atributo se inyecta mientras que la construcción de su vista.

    por ejemplo, marque la siguiente vista y el código de secuencia de comandos fragmento de cómo hacerlo:

    <div id="myDiv" data-count="@Model.Employees.Count">
    </div>
    
    
    <script>
    
      if($("#myDiv").data("count") > 1){
        executeJsfunction();
      }
    
    </script>
  6. 0

    En caso de que usted no desee aún hacer el script de java basado en alguna condición

    definir una sección en la maquetación html

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

    en su opinión,

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

    En mi caso no quiero exponer a mis Javascript, si esta característica no está habilitada, también va a reducir el tamaño de la página

Dejar respuesta

Please enter your comment!
Please enter your name here