2012-07-12 83 views
18

我已經看到關於此主題和一些博客的一些帖子,但似乎沒有提到我得到的輸出。如何在剃鬚刀中創建JavaScript字符串

我想要的是生成一個谷歌地圖的信息。手動輸入信息會產生正確的信息。這部分工作。

我被卡住的地方是當我要去dynamiccaly創建JavaScript數組與字符串與我想要在我的地圖上的信息。

的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'], 
    ]; 

很簡單的JavaScript數組,我認爲與創造:

<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 – 2012-07-12 12:13:40

回答

16

只是

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

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


]; 
</script> 

它的工作並表現出試圖...

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

     ['aaa', bbb'], 


]; 
</script> 
+0

這工作出色,謝謝。自從昨天 – 2012-07-12 10:49:19

+1

哈哈,這讓我很頭疼......將來可能會對你所有的頭痛都施加這樣的效果;) – Yasser 2012-07-12 11:02:48

+1

難道你不會錯過之前的「bbb」嗎? – radbyx 2014-09-19 07:07:08

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? – 2012-07-12 12:12:39

+3

Html.raw不會轉義在Javascript中具有特殊含義的字符(如單引號)。取決於可能導致運行時錯誤的數據。 – 2012-07-12 12:51:37

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>