À 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>

@ 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)

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)
};

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)    

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"


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)

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")
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.