रेज़र का उपयोग करते हुए, मैं बूलियन को जावास्क्रिप्ट चर में कैसे प्रस्तुत करूं?


144

मैं एक cshtml फ़ाइल में एक जावास्क्रिप्ट चर में एक बूलियन कैसे प्रस्तुत करूं?

वर्तमान में यह एक सिंटैक्स त्रुटि दिखाता है:

<script type="text/javascript" >

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

@ एक वैध जेएस ऑपरेटर नहीं है। इसका मतलब है, यह केवल तार में हो सकता है
इवान कुकिर

यह सवाल मुझे पुराना लगता है
निकोस

मुझे नहीं पता कि T # क्या है, इसलिए मैंने माना कि इसका मतलब C # @ निकोस;)
Mafii

आपकी टिप्पणी से कोई मतलब नहीं है
निकोस

वाह यह Qu वास्तव में निरसित
निकोस

जवाबों:


298

आप भी कोशिश कर सकते हैं:

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

और एक बेहतर तरीका उपयोग करना है:

isFollowing: @Json.Encode(Model.IsFollowing)

63
@Json.Encode(Model.IsFollowing)imho सबसे सुरुचिपूर्ण समाधान है। धन्यवाद!
सैंड्रो

2
आम तौर पर एक से अधिक बूलियन का उपयोग किया जा रहा है, इस मामले में पूरे मॉडल को एन्कोडिंग करने से चीजें अच्छी होती हैं और उसके बाद उपयोग करने में आसान होती हैं। उदाहरण: var मॉडल = @ Html.Raw (Json.Encode (मॉडल)); और फिर आप सिर्फ 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

विधि का उपयोग करना, स्ट्रिंग करना और कम करना निश्चित रूप से मेरे विकल्प में सबसे साफ है क्योंकि यह जावास्क्रिप्ट में अच्छी तरह से पढ़ता है।
फ्रैंक थॉमस

28

क्योंकि एक खोज ने मुझे यहां लाया: ASP.NET कोर में, IJsonHelperएक Encode()विधि नहीं है । इसके बजाय, उपयोग करें Serialize()। उदाहरण के लिए:

isFollowing: @Json.Serialize(Model.IsFollowing)    

3
Asp.net कोर का उल्लेख करने के लिए धन्यवाद!
शरीफ मामून

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

आप क्यों Trueऔर trueकैसे पूछते हैं ... अच्छा सवाल:
बूलियन क्यों करता है। आउटपुट "ट्रू" और "ट्रू" नहीं


यह सवाल करने के लिए नहीं, लेकिन @Model.IsFollowingवास्तव में वैध जेएस सिंटैक्स की एन्कोडिंग है ? या यह इस तथ्य पर भरोसा कर रहा है कि ऐसा इसलिए होगा क्योंकि यह बूलियन होना है?
गहोआ

@ Model.IsFollowing रेजर सिंटैक्स है, js नहीं
निकोस

@gahooa, नहीं, यह नहीं है, यह रेजर इंजन के साथ सर्वर पर पार्स किया गया है।
गडरॉन

@ निकोस, फिर कोशिश करें:'@(Model.IsFollowing)'
गॉर्डन मोनिका

@ निकोस, क्या आपने इसे चलाने की कोशिश की? बहुत बार यह सिर्फ विजुअल स्टूडियो मुद्दा है, लेकिन यह पूरी तरह से ठीक चलता है। इसे चलाने की कोशिश करो!
गदोरन

4

यहाँ एक और विचार करने का विकल्प है, !! बूलियन में रूपांतरण।

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

यह क्लाइंट की ओर से निम्नलिखित उत्पन्न करेगा, जिसमें 1 को सही और 0 से गलत में परिवर्तित किया जाएगा।

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

मामूली सुधार !! @ (Model.IsFollowing? 1: 0) महान काम करता है
चिकन

3

एक समाधान जो पढ़ने में आसान है वह यह करना होगा:

isFollowing: @(Model.IsFollowing ? "true" : "false")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.