2013-01-21 6 views
93

Jak renderować wartość logiczną Boolean do zmiennej JavaScript w pliku cshtml?Używając narzędzia Razor, jak renderować wartość logiczną Boolean do zmiennej JavaScript?

Obecnie to pokazuje błąd składni:

<script type="text/javascript" > 

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

@ nie jest prawidłowym operatorem JS. To znaczy, że może wystąpić tylko w łańcuchach –

+0

to pytanie sprawia, że ​​czuję się stary – Nikos

+0

Nie wiem co to jest T #, więc założyłem, że to znaczy C# @ Nikos;) – Mafii

Odpowiedz

188

Możesz również spróbować:

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

i coraz lepszym sposobem jest użycie:

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

'@ Json.Encode (Model.IsFollowing) 'jest imho najbardziej eleganckim rozwiązaniem – Sandro

+1

Zwykle używa się więcej niż jednego boolowskiego, w którym to przypadku kodowanie całego modelu sprawia, że ​​rzeczy są przyjemne i łatwe do wykorzystania później: np .: ** var model = @ Html.Raw (Json.Encode (Model)); ** a następnie możesz po prostu zadzwonić * model.IsFollowing * (Niestety nie wiem, jak poprawnie sformatować kod komentarza) – Jynn

+0

'@ (Model.IsFollowing)' === "@true" działa dla mnie –

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

Dlaczego True a nie true pytasz ... dobre pytanie:
Why does Boolean.ToString output "True" and not "true"

+0

Nie kwestionować go, ale czy kodowanie "@ Model.IsFollowing" rzeczywiście prawidłową składnię JS? Czy może polega to na tym, że dzieje się tak dlatego, że jest boolean? – gahooa

+0

hmm, nadal pokazuje błąd – Nikos

+0

@ Model.IsFollowing jest brzytwą składnią, nie jest to js – Nikos

17

JSON logiczna musi być małe.

Dlatego spróbuj tego (i upewnij się, że NTO mieć komentarz // na linii):

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

lub (uwaga: trzeba używać nazw System.Xml):

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

Podejście .ToString() jest prawdopodobnie najbardziej wydajne.Za pomocą '@ Model.IsFollowing.ToString(). ToLowerInvariant()' musi być nieco bardziej wydajne i nieco bardziej proste – xDisruptor

2

Oto kolejna opcja do rozważenia, za pomocą !! konwersja do boolean.

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

Spowoduje to wygenerowanie następujących po stronie klienta, z 1 jest konwertowany na true i 0 na false.

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

drobne korekty !! @ (Model.IsFollowing?1: 0) działa świetnie – chicken

8

Ponieważ wyszukiwania przyprowadził mnie tutaj: w ASP.NET Core IJsonHelper nie ma sposobu Encode(). Zamiast tego użyj Serialize(). Np .:

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

Dzięki za wzmiankę o rdzeniu asp.net! –

Powiązane problemy