2011-12-27 21 views
5

El problema es que colocar una variable C# dentro de una función JS dentro de @Section produce javascript incorrecto (solo en MVC 4).ASP.NET MVC 4 - Razor dentro de la función Javascript dentro de @Section Causas Error de ámbito

En una función JS en MVC 3, todo se ejecuta como se esperaba.

@section test { 

<script type="text/javascript"> 
    $(function() { 
     alert(@DateTime.Now); 
    }); 
</script> 
} 

Tome este mismo código y colocarlo en una aplicación MVC4 y obtendrá JS malformados.

El HTML de la página en realidad hará que el siguiente:

<script type="text/javascript"> 
    $(function() { 
     alert(12/27/2011 11:04:04 AM); 

y el html emitirá

); }

Tenga en cuenta que la etiqueta de script de cierre no se produce.

Parece que la llave de cierre en la función JS se confunde con la llave de cierre de Razor.

en cuenta que yo también estoy declarando un RenderSection ("test", falsa ") en mi archivo _Layout.cshtml.

+0

wow, este post me hizo descubrir sobre mvc4 ... –

Respuesta

1

que he visto este tipo de problemas. Envuelva su estado de alerta en <text></text> etiquetas

+0

Este fue mi pensamiento inicial. Lo intenté tan bien como la sintaxis @: pero ninguno resuelve el problema del alcance. –

2

lo que terminé haciendo por ahora se emite la JS func cierre en Html.Raw @().

Dado que este es tan fácil de recrear, voy a presentar esto como un error a Microsoft.

@section test { 
    <script type="text/javascript"> 
     $(function() { 
      alert(@DateTime.Now); 
     @(Html.Raw("});")) 
    </script> 
} 
4

Sé que han sido una artimaña desde que se hizo la pregunta, pero también se puede intentar algo como esto.

@section test { 
    <script type="text/javascript"> 
     $(function() { 
      alert(@(DateTime.Now)); 
     }); 
    </script> 
} 

Tenga en cuenta que "()" después de @.

Espero que te ayudemos.

0

Definitivamente un error. Prefiero esta solución sobre la que publicaste. Por alguna razón, otros elementos de afeitar parecen interpretar los corchetes correctamente, por lo que simplemente envuelvo el contenido del script en otro conjunto de llaves.

@section test { 
if (true) { 
<script type="text/javascript"> 
    $(function() { 
     alert(@DateTime.Now); 
    }); 
</script> 
} 
} 
3

Lo sentimos, no pude dejar de meter su cuchara aquí ... No veo cómo la sintaxis de la pregunta inicial sería en realidad el trabajo. Cuando lo pruebo en MVC3, en VS2010, pone una línea ondulada verde debajo del "DateTime", y cuando pasa el cursor sobre eso, dice "La compilación condicional está desactivada".Pero si me rodeo entre comillas, que hace el trabajo, como en:

@section test { 

<script type="text/javascript"> 
    $(function() { 
     alert("@DateTime.Now"); 
    }); 
</script> 
} 

Y luego, cuando lo ejecuto (F5) se muestra la alerta de JavaScript como se esperaba, y cuando me vista de origen que presta:

<script type="text/javascript"> 
    $(function() { 
     alert("07/09/2012 10:41:26"); 
    }); 
</script> 
Cuestiones relacionadas