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>

@ 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)

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)
};

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)    

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"


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)

koreksi minor !! @ (Model.IsFollowing? 1: 0) sangat bagus
— ayam

3

Solusi yang lebih mudah dibaca adalah dengan melakukan ini:

isFollowing: @(Model.IsFollowing ? "true" : "false")
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.