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>
Nikos
fuente
@ 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)
otro usuario
fuente
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)
};
Lucero
fuente
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)    
Marc L.
fuente
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"?

gdoron está apoyando a Monica
fuente
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)
Stuart Hallows
fuente
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")
marxlaml
fuente