Usando Razor, ¿cómo renderizo un booleano a una variable de JavaScript?


144

¿Cómo renderizo un booleano a una variable de JavaScript en un archivo cshtml?

Actualmente esto muestra un error de sintaxis:

<script type="text/javascript" >

    var myViewModel = {
        isFollowing: @Model.IsFollowing  // This is a C# bool
    };
</script>

@ no es un operador JS válido. Significa que solo puede ocurrir de forma secuencial
Ivan Kuckir

esta pregunta me hace sentir viejo
Nikos

No sé qué es T #, así que supuse que esto significaba C # @Nikos;)
Mafii

su comentario no tiene sentido
Nikos

wow esto Qu realmente golpeó al representante
Nikos

Respuestas:


298

Quizás también quieras probar:

isFollowing: '@(Model.IsFollowing)' === '@true'

y una forma cada vez mejor es usar:

isFollowing: @Json.Encode(Model.IsFollowing)

63
@Json.Encode(Model.IsFollowing)Es en mi humilde opinión la solución más elegante. ¡Gracias!
Sandro

2
Normalmente, se utilizará más de un booleano, en cuyo caso la codificación de todo el modelo hace que las cosas sean agradables y fáciles de usar a partir de entonces. por ejemplo: var model = @ Html.Raw (Json.Encode (Model)); y luego puedes llamar a model.IsFollowing (Lo siento, no sé cómo formatear el código de comentario correctamente)
Jynn

Agregar @using System.Web.Helperspara completar el código.
taylorswiftfan

29

El booleano JSON debe estar en minúsculas.

Por lo tanto, intente esto (y asegúrese de que nto tenga el //comentario en la línea):

var myViewModel = {
    isFollowing: @Model.IsFollowing.ToString().ToLower()
};

O (nota: necesita usar el espacio de nombres System.Xml):

var myViewModel = {
    isFollowing: @XmlConvert.ToString(Model.IsFollowing)
};

1
El enfoque .ToString () es probablemente el más eficiente. Usar '@ Model.IsFollowing.ToString (). ToLowerInvariant ()' debe ser un poco más eficiente y algo más directo.
XDS

Usar el método, encadenar y bajar es definitivamente el más limpio en mi opción, ya que se lee muy bien en javascript.
Frank Thomas

28

Porque una búsqueda me trajo aquí: en ASP.NET Core, IJsonHelperno tiene un Encode()método. En cambio, use Serialize(). P.ej:

isFollowing: @Json.Serialize(Model.IsFollowing)    

3
¡Gracias por mencionar asp.net core!
Sharif Mamun

13
var myViewModel = {
    isFollowing: '@(Model.IsFollowing)' == "True";
};

Por qué Truey no truepreguntas ... Buena pregunta:
¿Por qué Boolean.ToString muestra "True" y no "true"?


No lo cuestionamos, pero ¿es la codificación de la @Model.IsFollowingsintaxis JS realmente válida? ¿O se basa en el hecho de que será porque resulta ser booleano?
gahooa

@ Model.IsSiguiente es la sintaxis de la maquinilla de afeitar, no js
Nikos

@gahooa, no, no lo es, se analiza en el servidor con el motor Razor.
Gdoron está apoyando a Mónica el

@Nikos, luego intenta:'@(Model.IsFollowing)'
gdoron está apoyando a Monica el

@ Nikos, ¿Intentaste ejecutarlo? muchas veces es solo un problema de Visual Studio, pero funciona perfectamente bien. ¡Intenta ejecutarlo!
Gdoron está apoyando a Mónica el

4

Aquí hay otra opción a considerar, usando el !! conversión a booleano.

isFollowing: !!(@Model.IsFollowing ? 1 : 0)

Esto generará lo siguiente en el lado del cliente, con 1 convertido a verdadero y 0 a falso.

isFollowing: !!(1)  -- or !!(0)

corrección menor !! @ (Model.IsSiguiendo? 1: 0) funciona muy bien
pollo

3

Una solución que es más fácil de leer sería hacer esto:

isFollowing: @(Model.IsFollowing ? "true" : "false")
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.