การใช้มีดโกนฉันจะสร้าง Boolean ให้กับตัวแปร JavaScript ได้อย่างไร


144

ฉันจะแสดง Boolean เป็นตัวแปร JavaScript ในไฟล์ cshtml ได้อย่างไร

ปัจจุบันนี้แสดงข้อผิดพลาดทางไวยากรณ์:

<script type="text/javascript" >

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

@ ไม่ใช่ตัวดำเนินการ JS ที่ถูกต้อง หมายความว่ามันสามารถเกิดขึ้นได้เฉพาะในสายอักขระ
Ivan Kuckir

คำถามนี้ทำให้ฉันรู้สึกเก่า
Nikos

ฉันไม่รู้ว่า T # คืออะไรฉันจึงสันนิษฐานว่านี่หมายถึง C # @Nikos;)
Mafii

ความคิดเห็นของคุณไม่สมเหตุสมผล
Nikos

ว้าว Qu นี้ชนตัวแทนจริง ๆ
Nikos

คำตอบ:


298

คุณอาจต้องการลอง:

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

และวิธีที่ดีกว่าคือการใช้:

isFollowing: @Json.Encode(Model.IsFollowing)

63
@Json.Encode(Model.IsFollowing)imho เป็นทางออกที่หรูหราที่สุด ขอบคุณ!
Sandro

2
โดยปกติจะมีบูลีนมากกว่าหนึ่งตัวที่ใช้ในกรณีที่การเข้ารหัสทั้งโมเดลทำให้สิ่งดีและใช้งานง่ายหลังจากนั้น เช่น: var model = @ Html.Raw (Json.Encode (Model)); และจากนั้นคุณก็สามารถโทรmodel.IsFollowing (ขออภัยผมไม่ทราบวิธีการจัดรูปแบบการแสดงความคิดเห็นรหัสอย่างถูกต้อง)
Jynn

เพิ่ม@using System.Web.Helpersเพื่อกรอกรหัส
taylorswiftfan

29

บูลีน JSON ต้องเป็นตัวพิมพ์เล็ก

ดังนั้นให้ลองสิ่งนี้ (และตรวจสอบให้แน่ใจว่า nto มี//ความคิดเห็นในบรรทัด):

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

หรือ (หมายเหตุ: คุณต้องใช้เนมสเปซSystem.Xml):

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

1
วิธี. ToString () น่าจะเป็นวิธีที่มีประสิทธิภาพมากที่สุด การใช้ '@ Model.IsFollowing.ToString (). ToLowerInvariant ()' จะต้องมีประสิทธิภาพมากกว่าเล็กน้อยและค่อนข้างตรงไปตรงมา
XDS

การใช้วิธีการในการสตริงและการลดลงเป็นวิธีที่สะอาดที่สุดในตัวเลือกของฉันเพราะมันอ่านอย่างดีในจาวาสคริปต์
Frank Thomas

28

เนื่องจากการค้นหานำมาให้ฉันที่นี่: ใน ASP.NET Core IJsonHelperไม่มีEncode()วิธีการ Serialize()แต่การใช้งาน เช่น:

isFollowing: @Json.Serialize(Model.IsFollowing)    

3
ขอบคุณสำหรับการกล่าวถึงแกน asp.net!
Sharif Mamun

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

ทำไมTrueและไม่ใช่trueคุณถาม ... คำถามที่ดี:
ทำไม Boolean.ToString เอาท์พุท "True" และไม่ "true"


ไม่ใช่คำถาม แต่เป็นการเข้ารหัสของ@Model.IsFollowingไวยากรณ์ JS ที่ใช้ได้จริงหรือไม่ หรือว่ามันขึ้นอยู่กับความจริงที่ว่ามันจะเป็นเพราะมันเป็นบูลีน?
gahooa

@ Model.IsFollowing เป็นไวยากรณ์ของมีดโกนไม่ใช่ js
Nikos

@gahooa ไม่มันไม่ได้แยกวิเคราะห์บนเซิร์ฟเวอร์ด้วยเอนจิ้นมีดโกน
gdoron ให้การสนับสนุนโมนิก้า

@Nikos จากนั้นลอง:'@(Model.IsFollowing)'
gdoron ให้การสนับสนุน Monica

@ Nikos, คุณพยายามเรียกใช้หรือไม่ หลายครั้งที่มันเป็นปัญหาของ Visual Studio แต่มันก็ทำงานได้อย่างสมบูรณ์แบบ ลองใช้มัน!
gdoron ให้การสนับสนุนโมนิก้า

4

นี่คือตัวเลือกอื่นที่ควรพิจารณาโดยใช้ !! แปลงเป็นบูลีน

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

สิ่งนี้จะสร้างสิ่งต่อไปนี้บนฝั่งไคลเอ็นต์โดย 1 ถูกแปลงเป็นจริงและ 0 เป็นเท็จ

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

การแก้ไขเล็กน้อย !! @ (โมเดลมีการติดตามหรือไม่ 1: 0) ใช้งานได้ดี
ไก่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.