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.