在 Javascript 中渲染时取消编码服务器端字符串

Unencode server side string when rendering in Javascript

本文关键字:取消 编码 服务器端 字符串 Javascript      更新时间:2023-09-26

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

            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);

它给了我同样的结果:(

哇,不!请不要手动操作 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中拥有什么数据,它都将始终正确编码。