在Javascript中渲染时,对服务器端字符串进行编码

时间:2012-07-02 16:10:55

标签: javascript razor

我从我的控制器返回一个显示网格的模型。工作良好。我还需要使用相同的数据在谷歌地图上生成点。我在我的原型中设置了以下代码,我需要替换它:

            var locationsAll = [
                ["Pretty", 40.1508, -83.21],
                ["Little", 40.1308, -83.11],
                ["Smug", 40.001, -83.01],
                ["Troublemaker", 40.109, -83.291],
                ["Smallest", 40.08, -83.20]
                ];

            PlotpointsonMap(locationsAll);

到目前为止一切顺利。这是有效的,所以我将其转换为像这样的javascript:

                @{
                    var locations = "[";
                   foreach (var gmap in Model.MapPoints )
                   {
                       locations += "['" + gmap.EventStringData + "'," + gmap.Latitude + "," + gmap.Longitude + "],";
                   }

                    locations = locations.TrimEnd(',') + "]";

                }

            var myLocations = @locations;
            PlotpointsonMap(myLocations);

然而,这一半起作用。当我查看生成的源时,我在我的javascript块中获得以下代码:

var myLocations = [["update",40.080398,-83.139141] 

我需要它像这样呈现:

var myLocations = [["update",40.080398,-83.139141]

非常感谢有关如何实现这一目标的任何想法。我试过了:

var myLocations = @Server.HtmlDecode(locations);

它给了我同样的结果:(

1 个答案:

答案 0 :(得分:0)

哇,不! 请不要手动JSON操作。没有逗号,没有引号,没有修剪,没有括号请。那颗心。

只需使用JSON解析器:

<script type="text/javascript">
    var locationsAll = @Html.Raw(Json.Encode(
        Model.MapPoints.Select(x => new object[] 
        { 
            x.EventStringData, x.Latitude, x.Longitude 
        })
    ));
    PlotpointsonMap(locationsAll);
</script>

JSON解析器现在可以保证,无论您在MapPoints中拥有什么数据,它都将被正确编码。