Usando Razor, come posso rendere un booleano su una variabile JavaScript?


144

Come si esegue il rendering di un valore booleano in una variabile JavaScript in un file cshtml?

Attualmente questo mostra un errore di sintassi:

<script type="text/javascript" >

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

@ non è un operatore JS valido. Significa che può verificarsi solo nelle stringhe
Ivan Kuckir,

questa domanda mi fa sentire vecchio
Nikos,

Non so cosa sia T #, quindi ho pensato che significasse C # @Nikos;)
Mafii,

il tuo commento non ha senso
Nikos,

Eeeek !!! questo Qu ha davvero battuto il Rep
Nikos il

Risposte:


298

Puoi anche provare:

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

e un modo sempre migliore è usare:

isFollowing: @Json.Encode(Model.IsFollowing)

63
@Json.Encode(Model.IsFollowing)è la soluzione più elegante. Grazie!
Sandro,

2
Normalmente ci sarà più di un booleano in uso, nel qual caso codificare l'intero modello rende le cose piacevoli e facili da usare in seguito. es: var model = @ Html.Raw (Json.Encode (Model)); e poi puoi semplicemente chiamare model.IsFollowing (Mi dispiace non so come formattare correttamente il codice di commento)
Jynn

Aggiungi @using System.Web.Helpersper completare il codice.
taylorswiftfan,

29

Il valore booleano JSON deve essere minuscolo.

Pertanto, prova questo (e assicurati di non avere il //commento sulla linea):

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

Oppure (nota: è necessario utilizzare lo spazio dei nomi System.Xml):

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

1
L'approccio .ToString () è probabilmente il più efficiente. L'uso di "@ Model.IsFollowing.ToString (). ToLowerInvariant ()" deve essere un po 'più efficiente e un po' più semplice.
XDS

Utilizzando il metodo, stringa e abbassare è sicuramente il più pulito nella mia opzione in quanto si legge bene in javascript.
Frank Thomas,

28

Perché una ricerca mi ha portato qui: in ASP.NET Core, IJsonHelpernon ha un Encode()metodo. Invece, usa Serialize(). Per esempio:

isFollowing: @Json.Serialize(Model.IsFollowing)    

3
Grazie per aver menzionato il nucleo di asp.net!
Sharif Mamun,

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

Perché Truee non truechiedere ... Buona domanda:
perché Boolean.ToString produce "True" e non "true"


Non per metterlo in discussione, ma la codifica della @Model.IsFollowingsintassi JS è effettivamente valida? O si basa sul fatto che lo sarà perché sembra essere booleano?
gahooa,

@ Model.IsFollowing è la sintassi del rasoio, non js
Nikos

@gahooa, no non lo è, viene analizzato sul server con il motore Razor.
gdoron sostiene Monica il

@Nikos, quindi prova:'@(Model.IsFollowing)'
gdoron supporta Monica il

@Nikos, hai provato a eseguirlo? molte volte è solo un problema di Visual Studio ma funziona perfettamente. Prova a eseguirlo!
gdoron sostiene Monica il

4

Ecco un'altra opzione da considerare, usando !! conversione in booleano.

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

Ciò genererà quanto segue sul lato client, con 1 convertito in vero e 0 in falso.

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

correzione minore !! @ (Model.IsFollowing? 1: 0) funziona alla grande
pollo,

3

Una soluzione più facile da leggere sarebbe quella di fare questo:

isFollowing: @(Model.IsFollowing ? "true" : "false")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.