raw mvc inside javascript asp.net-mvc razor

mvc - Razor/JavaScript y punto y coma posterior



url action javascript (7)

Usando Visual Studio 2012, en una página de vista Razor, en la sección de JavaScript, obtengo lo que creo que es una batalla entre la sintaxis de Razor y la sintaxis de JavaScript. En particular, el punto y coma final en la sección del script está marcado por intellisense y se entrega una advertencia del compilador (no error):

''Advertencia 13 Error de sintaxis''.

Si lo ReSharper , recibo una recomendación de finalización de la declaración ( ReSharper en este caso, pero solo una buena práctica).

<script type="text/javascript"> $().ready(function(){ var customer = @Html.Raw(ViewBag.CustomerJSON); // <- Razor (I think) doesn''t like this semicolon }); </script>

¿Es esto un error en Razor? Si es así, ¿hay alguna manera de reescribir esto para evitar este problema?


¿Es esto un error en Razor?

Absolutamente no. Ejecute su aplicación, y funcionará como se esperaba.

Es un error en las herramientas que está utilizando (Visual Studio 2012, ReSharper, ...) que son incapaces de reconocer una sintaxis perfectamente válida y de advertirle sobre algo sobre lo que no debe advertirse. Podría intentar abrir un problema en el sitio de Microsoft Connect e indicar este error si eso no se ha hecho todavía.


Aquí hay una solución para booleanos:

var myBool = @(Model.MyBool ? "true;" : "false;")


Como esto parece estar sucediendo y es una molestia, pensé que al menos les haría saber a los demás lo que terminé usando como un "hack". No quiero ignorar la advertencia y preferiría aceptar una sintaxis hokier (y sí, alguien va a decir que esto matará el rendimiento :))

Lo que uso como solución alternativa es usar una adición al lado del cliente al final. Para mí, este error ocurrió al definir una constante "entera", por lo que

window.foo = @(Model.Something);

me dio el buen error de punto y coma. Simplemente cambié esto a:

window.foo = @Model.Something + 0;

(En el caso de preguntas indicado, solo debe poder agregar '''', entonces + ''''.

Sé que hay una adición más que está sucediendo en el cliente y no es elegante, pero evita el error. Entonces úselo o no, pero prefiero esto más que ver la advertencia / error.

Si alguien sabe de una solución sintáctica del lado del servidor para esto, preferiría esto al lado del cliente, así que por favor agregue.


Descubrí que envolver la sintaxis de Razor en una función de identidad JavaScript también hace feliz al IDE.

<script type="text/javascript"> @* I stands for Identity *@ function I(obj) { return obj; } $().ready(function(){ var customer = I(@Html.Raw(ViewBag.CustomerJSON)); }); </script>


Esto funcionó para mí

@Html.Raw(string.Format("var customer = {0};", ViewBag.CustomerJSON));


Esto funcionó para mí:

var customer = @Html.Raw(ViewBag.CustomerJSON + ";")


<script type="text/javascript"> $().ready(function(){ var customerName = (''@ViewBag.CustomerName''); // <- wrap in parens }); </script>

¿No es tan simple como envolver entre paréntesis? Poner valores a través de la consola parece funcionar bien sin ningún efecto secundario.

Funciona para cadenas, pero todavía da el error para valores no citados, pero todavía me gusta para valores de cadena. Para los números, puede usar parseInt(''@Model.TotalResultCount'', 10) .