Menggunakan Razor, bagaimana cara membuat Boolean ke variabel JavaScript?

144

Bagaimana cara me-render Boolean ke variabel JavaScript dalam file cshtml?

Saat ini ini menunjukkan kesalahan sintaksis:

<script type="text/javascript" >

    var myViewModel = {
        isFollowing: @Model.IsFollowing  // This is a C# bool
    };
</script>
Nikos
sumber
@ bukan operator JS yang valid. Ini berarti, bahwa itu hanya dapat terjadi dalam string
Ivan Kuckir
pertanyaan ini membuat saya merasa tua
Nikos
Saya tidak tahu apa itu T #, jadi saya berasumsi ini berarti C # @Nikos;)
Mafii
komentar Anda tidak masuk akal
Nikos
wow Qu ini benar - benar bertemu Rep
Nikos

Jawaban:

298

Anda mungkin juga ingin mencoba:

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

dan cara yang lebih baik adalah dengan menggunakan:

isFollowing: @Json.Encode(Model.IsFollowing)
pengguna lain
sumber
63
@Json.Encode(Model.IsFollowing)adalah imho solusi paling elegan. Terima kasih!
Sandro
2
Biasanya akan ada lebih dari satu boolean yang digunakan dalam hal pengkodean seluruh model membuat hal-hal bagus dan mudah digunakan setelahnya. mis: var model = @ Html.Raw (Json.Encode (Model)); dan kemudian Anda bisa memanggil model.IsFollowing (Maaf saya tidak tahu bagaimana memformat kode komentar dengan benar)
Jynn
Tambahkan @using System.Web.Helpersuntuk menyelesaikan kode.
taylorswiftfan
29

Boolean JSON harus berukuran kecil.

Karena itu, coba ini (dan pastikan tidak ada //komentar di telepon):

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

Atau (catatan: Anda perlu menggunakan namespace System.Xml):

var myViewModel = {
    isFollowing: @XmlConvert.ToString(Model.IsFollowing)
};
Lucero
sumber
1
Pendekatan .ToString () mungkin yang paling efisien. Menggunakan '@ Model.IsFollowing.ToString (). ToLowerInvariant ()' harus sedikit lebih efisien dan agak lebih mudah.
XDS
Menggunakan metode ini, untuk merangkai dan menurunkan jelas merupakan pilihan terbersih saya karena terbaca dengan baik dalam javascript.
Frank Thomas
28

Karena pencarian membawa saya ke sini: di ASP.NET Core, IJsonHelpertidak memiliki Encode()metode. Sebaliknya, gunakan Serialize(). Misalnya:

isFollowing: @Json.Serialize(Model.IsFollowing)    
Marc L.
sumber
3
Terima kasih telah menyebutkan inti asp.net!
Sharif Mamun
13
var myViewModel = {
    isFollowing: '@(Model.IsFollowing)' == "True";
};

Mengapa Truedan tidak trueAnda tanyakan ... Pertanyaan bagus:
Mengapa Boolean.ToString menampilkan "Benar" dan bukan "benar"

gdoron mendukung Monica
sumber
Bukan untuk mempertanyakannya, tetapi apakah penyandian @Model.IsFollowingsintaks JS sebenarnya valid? Atau apakah itu bergantung pada kenyataan bahwa itu akan terjadi karena kebetulan adalah boolean?
gahooa
@ Model.IsFollowing adalah sintaks silet, bukan js
Nikos
@ gahooa, tidak bukan, itu diurai di server dengan mesin Razor.
gdoron mendukung Monica
@ Nikos, lalu coba:'@(Model.IsFollowing)'
gdoron mendukung Monica
@ Nikos, Apakah Anda mencoba menjalankannya? banyak kali itu hanya masalah Visual Studio tetapi berjalan dengan sangat baik. Coba jalankan!
gdoron mendukung Monica
4

Berikut opsi lain untuk dipertimbangkan, menggunakan !! konversi ke boolean.

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

Ini akan menghasilkan yang berikut di sisi klien, dengan 1 dikonversi menjadi true dan 0 menjadi false.

isFollowing: !!(1)  -- or !!(0)
Stuart Hallows
sumber
koreksi minor !! @ (Model.IsFollowing? 1: 0) sangat bagus
ayam
3

Solusi yang lebih mudah dibaca adalah dengan melakukan ini:

isFollowing: @(Model.IsFollowing ? "true" : "false")
marxlaml
sumber