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.