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