【问题标题】:How to create a javascript string in razor如何在 razor 中创建一个 javascript 字符串
【发布时间】:2012-07-12 01:58:16
【问题描述】:

我看过一些关于这个主题的帖子和一些博客,但似乎没有人提到我得到的输出。

我想要的是生成一个带有信息的谷歌地图地图。手动输入信息会产生正确的信息。所以这部分有效。

当我要动态创建 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>

转义单引号不起作用。 我做错了什么?

【问题讨论】:

标签: javascript asp.net-mvc-3 razor


【解决方案1】:

刚试过

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

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


 ];
 </script>

它工作并显示...

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

       ['aaa', 'bbb'],


];
</script>

【讨论】:

  • 这很好用,谢谢。从昨天开始就让我头疼
  • 你不会错过“bbb”之前的'吗?
  • @radbyx,我已经编辑了答案以更好地反映我的问题(字符串和浮点数的组合)
  • 是或否? :) 我也看不到您的编辑。 :)
【解决方案2】:

您不想在整个字符串上调用 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>

【讨论】:

  • 有什么理由我应该使用这个解决方案而不是@Html.Raw?
  • Html.raw 不会转义 Javascript 中具有特殊含义的字符(如单引号)。取决于可能导致运行时错误的数据。
【解决方案3】:

我相信您可以在 .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(Json.Encode(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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2014-06-27
    • 2012-03-12
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多