À l'aide de Razor, comment rendre un booléen en variable JavaScript?

144

Comment rendre un booléen en une variable JavaScript dans un fichier cshtml?

Actuellement, cela montre une erreur de syntaxe:

<script type="text/javascript" >

    var myViewModel = {
        isFollowing: @Model.IsFollowing  // This is a C# bool
    };
</script>
Nikos
la source
@ n'est pas un opérateur JS valide. Cela signifie que cela ne peut se produire que dans les chaînes
Ivan Kuckir
cette question me fait me sentir vieux
Nikos
Je ne sais pas ce qu'est T #, alors j'ai supposé que cela signifiait C # @Nikos;)
Mafii
votre commentaire n'a pas de sens
Nikos
wow ce Qu a vraiment frappé le représentant
Nikos

Réponses:

298

Vous pouvez également essayer:

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

et une manière toujours meilleure est d'utiliser:

isFollowing: @Json.Encode(Model.IsFollowing)
autre_utilisateur
la source
63
@Json.Encode(Model.IsFollowing)est à mon avis la solution la plus élégante. Je vous remercie!
Sandro
2
Normalement, il y aura plus d'un booléen utilisé, auquel cas l'encodage de l'ensemble du modèle rend les choses agréables et faciles à utiliser par la suite. par exemple: var model = @ Html.Raw (Json.Encode (Model)); et ensuite vous pouvez simplement appeler model.IsFollowing (Désolé, je ne sais pas comment formater le code de commentaire correctement)
Jynn
Ajoutez @using System.Web.Helperspour compléter le code.
taylorswiftfan le
29

Le booléen JSON doit être en minuscules.

Par conséquent, essayez ceci (et assurez-vous de ne pas avoir le //commentaire sur la ligne):

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

Ou (note: vous devez utiliser l'espace de noms System.Xml):

var myViewModel = {
    isFollowing: @XmlConvert.ToString(Model.IsFollowing)
};
Lucero
la source
1
L'approche .ToString () est probablement la plus efficace. Utiliser '@ Model.IsFollowing.ToString (). ToLowerInvariant ()' doit être un peu plus efficace et un peu plus simple.
XDS
En utilisant la méthode, enchaîner et abaisser est certainement la plus propre de mon option car elle se lit bien en javascript.
Frank Thomas
28

Parce qu'une recherche m'a amené ici: dans ASP.NET Core, IJsonHelpern'a pas de Encode()méthode. Utilisez plutôt Serialize(). Par exemple:

isFollowing: @Json.Serialize(Model.IsFollowing)    
Marc L.
la source
3
Merci d'avoir mentionné asp.net core!
Sharif Mamun
13
var myViewModel = {
    isFollowing: '@(Model.IsFollowing)' == "True";
};

Pourquoi Trueet pas truevous demandez ... Bonne question:
Pourquoi Boolean.ToString affiche-t-il "True" et non "true"

gdoron soutient Monica
la source
Ne pas le remettre en question, mais le codage de la @Model.IsFollowingsyntaxe JS est-il réellement valide? Ou est-ce que cela se fonde sur le fait que ce sera parce que cela se trouve être booléen?
gahooa
@ Model.IsFollowing est la syntaxe de rasoir, pas js
Nikos
@gahooa, non ce n'est pas le cas, il est analysé sur le serveur avec le moteur Razor.
gdoron soutient Monica le
@Nikos, alors essayez:'@(Model.IsFollowing)'
gdoron soutient Monica le
@Nikos, avez-vous essayé de l'exécuter? souvent, c'est juste un problème de Visual Studio, mais cela fonctionne parfaitement. Essayez de l'exécuter!
gdoron soutient Monica le
4

Voici une autre option à considérer, en utilisant le !! conversion en booléen.

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

Cela générera les éléments suivants du côté client, 1 étant converti en vrai et 0 en faux.

isFollowing: !!(1)  -- or !!(0)
Stuart Hallows
la source
correction mineure !! @ (Model.IsFollowing? 1: 0) fonctionne très bien
poulet
3

Une solution plus facile à lire serait de faire ceci:

isFollowing: @(Model.IsFollowing ? "true" : "false")
marxlaml
la source