2013-01-21 12 views
93

Come si esegue il rendering di un booleano su una variabile JavaScript in un file cshtml?Utilizzo di Razor, come si esegue il rendering di un booleano su una variabile JavaScript?

Attualmente questa mostra un errore di sintassi:

<script type="text/javascript" > 

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

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

+0

questa domanda mi fa sentire vecchio – Nikos

+0

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

risposta

188

Puoi anche provare:

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

e un modo sempre migliore è utilizzare:

isFollowing: @Json.Encode(Model.IsFollowing) 
+46

'@ Json.Encode (Model.IsFollowing) 'è imho la soluzione più elegante.Grazie! – Sandro

+1

Normalmente ci sarà più di un booleano usato in quel caso che codifica l'intero modello rende le cose belle e facili da usare da allora in poi. Es: ** var model = @ Html.Raw (Json.Encode (Model)); ** e quindi puoi semplicemente chiamare * model.IsFollowing * (Spiacente, non so come formattare correttamente il codice del commento) – Jynn

+0

'@ (Model.IsFollowing)' === '@true' funziona per me –

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

Perché True e non true si chiede ... Bella domanda:
Why does Boolean.ToString output "True" and not "true"

+0

Non metterlo in discussione, ma la codifica di '@ Model.IsFollowing' è in realtà una sintassi JS valida? O si basa sul fatto che lo sarà perché sembra essere booleano? – gahooa

+0

hmm, mostra ancora un errore – Nikos

+0

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

17

Il booleano JSON deve essere minuscolo.

Pertanto, provate questo (e assicurarsi che nto di avere il // commento sulla linea):

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

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

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

L'approccio .ToString() è probabilmente il più efficiente. "@ Model.IsFollowing.ToString(). ToLowerInvariant()" deve essere un po 'più efficiente e un po' più diretto. – xDisruptor

2

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

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

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

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

correzione secondaria !! @ (Model.IsFollowing?1: 0) funziona alla grande – chicken

8

Perché una ricerca mi ha portato qui: in ASP.NET core, IJsonHelper non dispone di un metodo di Encode(). Invece, utilizzare Serialize(). Es .:

isFollowing: @Json.Serialize(Model.IsFollowing)  
+1

Grazie per aver menzionato il nucleo di asp.net! –

Problemi correlati