Sử dụng Dao cạo, làm cách nào để kết xuất Boolean thành biến JavaScript?


144

Làm cách nào để kết xuất Boolean thành biến JavaScript trong tệp cshtml?

Hiện tại điều này cho thấy một lỗi cú pháp:

<script type="text/javascript" >

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

@ không phải là toán tử JS hợp lệ. Điều đó có nghĩa là, nó chỉ có thể xảy ra trong các chuỗi
Ivan Kuckir

câu hỏi này khiến tôi cảm thấy già nua
Nikos

Tôi không biết T # là gì, vì vậy tôi giả sử điều này có nghĩa là C # @Nikos;)
Mafii

bình luận của bạn không có ý nghĩa
Nikos

wow điều này Qu thực sự đã đánh bại Rep
Nikos

Câu trả lời:


298

Bạn cũng có thể muốn thử:

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

và một cách tốt hơn bao giờ hết là sử dụng:

isFollowing: @Json.Encode(Model.IsFollowing)

63
@Json.Encode(Model.IsFollowing)Imho là giải pháp thanh lịch nhất. Cảm ơn bạn!
Sandro

2
Thông thường sẽ có nhiều hơn một boolean được sử dụng trong trường hợp mã hóa toàn bộ mô hình làm cho mọi thứ trở nên tốt đẹp và dễ sử dụng sau đó. ví dụ: var model = @ Html.Raw (Json.Encode (Model)); và sau đó bạn chỉ có thể gọi model.IsFollowing (Xin lỗi tôi không biết cách định dạng mã nhận xét đúng cách)
Jynn

Thêm @using System.Web.Helpersđể hoàn thành mã.
taylorswiftfan

29

Boolean JSON phải là chữ thường.

Do đó, hãy thử điều này (và đảm bảo nto có //nhận xét về dòng này):

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

Hoặc (lưu ý: bạn cần sử dụng không gian tên System.Xml):

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

1
Cách tiếp cận .ToString () có lẽ là cách hiệu quả nhất. Sử dụng '@ Model.IsFollowing.ToString (). ToLowerInvariant ()' phải hiệu quả hơn một chút và có phần đơn giản hơn.
XDS

Sử dụng phương thức, để xâu chuỗi và hạ thấp chắc chắn là sạch nhất trong tùy chọn của tôi vì nó đọc độc đáo trong javascript.
Frank Thomas

28

Bởi vì một tìm kiếm đã đưa tôi đến đây: trong ASP.NET Core, IJsonHelperkhông có Encode()phương pháp. Thay vào đó, sử dụng Serialize(). Ví dụ:

isFollowing: @Json.Serialize(Model.IsFollowing)    

3
Cảm ơn đã đề cập đến lõi asp.net!
Sharif Mamun

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

Tại sao Truevà không phải truebạn hỏi ... Câu hỏi hay:
Tại sao Boolean.ToString xuất "Đúng" chứ không phải "đúng"


Không đặt câu hỏi, nhưng mã hóa của @Model.IsFollowingcú pháp JS thực sự hợp lệ? Hoặc là nó dựa vào thực tế rằng nó sẽ là vì nó xảy ra là boolean?
gahooa

@ Model.IsFollowing là cú pháp dao cạo, không phải js
Nikos

@gahooa, không, không, nó được phân tích cú pháp trên máy chủ với công cụ Dao cạo.
gdoron đang hỗ trợ Monica

@Nikos, sau đó thử:'@(Model.IsFollowing)'
gdoron đang hỗ trợ Monica

@Nikos, bạn đã thử chạy nó chưa? rất nhiều lần nó chỉ là vấn đề của Visual Studio nhưng nó chạy rất tốt. Hãy thử chạy nó!
gdoron đang hỗ trợ Monica

4

Đây là một lựa chọn khác để xem xét, sử dụng !! chuyển đổi sang boolean.

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

Điều này sẽ tạo ra các mục sau ở phía máy khách, với 1 được chuyển thành true và 0 thành false.

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

chỉnh sửa nhỏ !! @ (Model.IsFollowing? 1: 0) hoạt động tuyệt vời

3

Một giải pháp dễ đọc hơn sẽ là làm điều này:

isFollowing: @(Model.IsFollowing ? "true" : "false")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.