Razor kullanarak, bir JavaScript değişkenine nasıl Boole oluşturabilirim?


144

Bir cshtml dosyasındaki bir JavaScript değişkenine Boole nasıl oluştururum?

Şu anda bu bir sözdizimi hatası gösteriyor:

<script type="text/javascript" >

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

@ geçerli bir JS operatörü değil. Bu, sadece dizelerde ortaya çıkabileceği anlamına gelir
Ivan Kuckir

bu soru beni yaşlı hissettiriyor
Nikos

T # 'nın ne olduğunu bilmiyorum, bu yüzden bunun C # @Nikos;) anlamına geldiğini varsaydım
Mafii

Yorumunuz mantıklı değil
Nikos

vay bu Qu gerçekten Rep çarptı
Nikos

Yanıtlar:


298

Ayrıca şunu da denemek isteyebilirsiniz:

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

ve her zamankinden daha iyi bir yol:

isFollowing: @Json.Encode(Model.IsFollowing)

63
@Json.Encode(Model.IsFollowing)en zarif çözümdür. Teşekkür ederim!
Sandro

2
Normalde birden fazla boolean kullanılacaktır, bu durumda tüm modeli kodlamak işleri daha sonra güzel ve kolay hale getirir. örneğin: var model = @ Html.Raw (Json.Encode (Model)); ve sonra sadece model arayabilirsiniz.IsFollowing (Üzgünüm yorum kodunu doğru şekilde nasıl biçimlendireceğimi bilmiyorum)
Jynn

@using System.Web.HelpersKodu tamamlamak için ekleyin .
taylorswiftfan

29

JSON boole küçük harf olmalıdır.

Bu nedenle, bunu deneyin (ve //satırda yorum yapmak için nto olduğundan emin olun ):

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

Veya (not: ad alanını kullanmanız gerekir System.Xml):

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

1
.ToString () yaklaşımı muhtemelen en verimli yaklaşımdır. '@ Model.IsFollowing.ToString (). ToLowerInvariant ()' kullanılması biraz daha verimli ve biraz daha basit olmalıdır.
XDS

Yöntemi kullanarak, dize ve alçaltmak için kesinlikle javascript güzel okur benim seçenek en temiz.
Frank Thomas

28

Çünkü bir arama beni buraya getirdi: ASP.NET Core'da IJsonHelperbir Encode()yöntemi yok. Bunun yerine kullanın Serialize(). Örneğin:

isFollowing: @Json.Serialize(Model.IsFollowing)    

3
Asp.net çekirdeğinden bahsettiğiniz için teşekkür ederiz!
Şerif Mamun

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

Neden Trueve truesormuyorsunuz ... İyi soru:
Neden Boolean.ToString çıktısı "Doğru" ve "doğru" değil


Sorgulamak için değil, @Model.IsFollowingaslında geçerli JS sözdiziminin kodlaması var mı? Yoksa boolean olduğu için olacağı gerçeğine mi dayanıyor?
gahooa

@ Model.IsFollowing js değil, jilet sözdizimi
Nikos

@gahooa, hayır değil, Razor motoru ile sunucuda ayrıştırılıyor.
gdoron, Monica

@Nikos, o zaman dene:'@(Model.IsFollowing)'
gdoron Monica

@Nikos, Koşmayı denedin mi? çoğu zaman sadece Visual Studio sorunu ama mükemmel çalışıyor. Çalıştırmayı deneyin!
gdoron Monica

4

İşte dikkate almak için başka bir seçenek, !! boole dönüşümü.

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

Bu, istemci tarafında aşağıdakileri oluşturur ve 1, true değerine ve 0, false değerine dönüştürülür.

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

küçük düzeltme !! @ (Model.IsAşağıdaki? 1: 0) harika çalışıyor
tavuk

3

Okunması daha kolay bir çözüm bunu yapmak olacaktır:

isFollowing: @(Model.IsFollowing ? "true" : "false")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.