2012-07-12 36 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>