2012-07-12 16 views
18

में एक जावास्क्रिप्ट स्ट्रिंग बनाने के लिए कैसे मैं इस विषय और कुछ ब्लॉगों के बारे में कुछ पदों को देखा है, लेकिन कोई भी उत्पादन मैं हो रही है उल्लेख करने के लिए लग रहे हैं।उस्तरा

क्या मैं चाहता हूँ यह के बारे में जानकारी के साथ एक गूगल मैप्स नक्शे उत्पन्न करने के लिए है। सही जानकारी में सूचना परिणामों को मैन्युअल रूप से दर्ज करना। तो वह हिस्सा काम करता है।

मैं कर रहा हूँ कहाँ अटक जब मैं जानकारी मेरे मानचित्र पर मैं चाहता हूँ के साथ तार के साथ जावास्क्रिप्ट सारिणी निर्मित dynamiccaly लिए जा रहा हूँ है।

html कोड मैं प्राप्त करना चाहते है:

<script type="text/javascript">  
    var projects = [ 
     ['Kantoor 4.1 bestaande bouw', 52.25446, 6.16024700000003, 'Deventer', '', 'adviseurs', 'rating30'], 
     ['School nieuw 4.0', 52.243161, 4.43677860000003, 'Noordwijk', '', 'adviseurs', 'rating30'], 
    ]; 

बहुत ही सरल जावास्क्रिप्ट सरणी है, जो मैं के साथ बनाने के लिए सोचा:

<script type="text/javascript"> 
var projects = [ 
    @foreach (var item in Model) 
    { 
     @HttpUtility.JavaScriptStringEncode("['" + item.Gebouwnaam + "', " + item.LocatieLatitude.ToString().Replace(",", ".") + ", " + item.LocatieLongitude.ToString().Replace(",", ".") + ", '" + item.Plaats + "', '" + item.Gebruiksfunctie + "', '" + item.Licentiehouder + "', '" + item.rating + "'],"); 
    } 
]; 
</script> 

हालांकि यह मेरे लिए देता है:

<script type="text/javascript"> 
var projects = [ 
    [\u0027Kantoor 4.1 bestaande bouw\u0027, 52.25446, 6.16024700000003, \u0027Deventer\u0027, \u0027\u0027, \u0027adviseurs\u0027, \u0027rating30\u0027], 
    [\u0027School nieuw 4.0\u0027, 52.243161, 4.43677860000003, \u0027Noordwijk\u0027, \u0027\u0027, \u0027adviseurs\u0027, \u0027rating30\u0027], 
]; 
</script> 

एकल उद्धरण से बचने से काम नहीं होता है। मैं क्या गलत कर रहा हूँ?

+0

शायद दूसरों के लिए प्रासंगिक है, यह एक दिलचस्प तरीका है और उस्तरा रों हो रहा है yntax संयोजन: http://stackoverflow.com/questions/4599169/using-razor-within-javascript इस –

उत्तर

16

बस

<script type="text/javascript"> 
var projects = [ 

    @Html.Raw("['" + "aaa" + "', " + "bbb" + "'],") 


]; 
</script> 

यह काम किया है और पता चला है के साथ की कोशिश की ...

<script type="text/javascript"> 
var projects = [ 

     ['aaa', bbb'], 


]; 
</script> 
+0

शानदार ढंग से काम करता है, धन्यवाद। एक ' "bbb" से पहले) –

+1

lol के बाद से सिर दर्द दे रहा था ... भविष्य में अपने सभी सिर दर्द के लिए इतना लागू होते हैं? – Yasser

+1

तुम्हें याद मत करो; यह मैं कल – radbyx

12

आप पूरी स्ट्रिंग पर JavaScriptStringEncode कॉल करने के लिए, वह भी अपने शाब्दिक संकेतक सांकेतिक शब्दों में बदलना होगा नहीं करना चाहती है (जो आपके उदाहरण में \ u0027 में परिवर्तित किया जा रहा है)। इसके बजाय, इस तरह अपने सरणी में प्रत्येक आइटम पर इसे कहते:

<script type="text/javascript"> 
var projects = [ 
    @foreach (var item in Model) 
    { 
     String.Format("['{0}',{1},{2},'{3}','{4}','{5}','{6}']", 
         HttpUtility.JavaScriptStringEncode(item.Gebouwnaam), 
         HttpUtility.JavaScriptStringEncode(item.LocatieLatitude.ToString().Replace(",", ".")), 
         HttpUtility.JavaScriptStringEncode(item.LocatieLongitude.ToString().Replace(",", ".")), 
         HttpUtility.JavaScriptStringEncode(item.Plaats), 
         HttpUtility.JavaScriptStringEncode(item.Gebruiksfunctie), 
         HttpUtility.JavaScriptStringEncode(item.Licentiehouder), 
         HttpUtility.JavaScriptStringEncode(item.rating) 
     ) 
    } 
]; 
</script> 
+0

क्या कोई कारण है कि मुझे इस समाधान का उपयोग क्यों करना चाहिए, न कि @ HTML.Raw? –

+3

Html.raw वर्णों से बच नहीं पाएगा जिनके पास जावास्क्रिप्ट (जैसे एकल उद्धरण) में विशेष अर्थ है। आपके डेटा के आधार पर जो रनटाइम त्रुटियों का कारण बन सकता है। –

2

मैं आप के लिए वस्तु को बदलने के लिए .net और लाभ उठाने Html.Raw में बड़े कार्य करने का सबसे कर सकता है विश्वास करते हैं:

@{ 
    var myObj = Model.Select(i => new { 
     item.Gebouwnaam, 
     item.LocatieLatitude.ToString().Replace(",", "."), 
     item.LocatieLongitude.ToString().Replace(",", "."), 
     item.Plaats, 
     item.Gebruiksfunctie, 
     item.Licentiehouder, 
     item.rating }).ToArray(); 
} 

<script type="text/javascript"> 
    var jsObj = @Html.Raw(myObj); 
</script> 

चूंकि यह इस सवाल में पर छुआ है, HttpUtility.JavaScriptStringEncode() तार न्यू लाइन वर्ण शामिल करने के कारण वास्तव में काम में आता:

@{ var myNetString = "Hi,\r\nMy name is Joe\r\nAnd I work in a button factory"; } 

<script type='text/javascript'> 
    var myJsString = '@HttpUtility.JavaScriptStringEncode(myNetString)'; 
</script> 
संबंधित मुद्दे