无效的Double.ToString()导致razor代码生成javascript

本文关键字:导致 razor 代码生成 javascript Double ToString 无效 | 更新日期: 2023-09-27 18:03:23

我使用下面的razor代码生成一些javascript来在Google地图上生成标记。

@foreach(Point point in Model.Points.Take(3))
{
    String longitude = point.Longitude.ToString(CultureInfo.InvariantCulture);
    String latitude = point.Latitude.ToString(CultureInfo.InvariantCulture);
    <text>
        var location = new google.maps.LatLng(@(longitude), @(latitude));
        bounds.extend(location);
        var marker = new google.maps.Marker({
            position: location,
            map: map
        });
    </text>
}

在开发中,这正确地变成:

var location = new google.maps.LatLng(52.2124273, 5.9545532);
bounds.extend(location);
var marker = new google.maps.Marker({
    position: location,
    map: map
});

但是,在我们的生产服务器上,它变成了:

var location = new google.maps.LatLng(522124273000, 59545532000);
bounds.extend(location);
var marker = new google.maps.Marker({
    position: location,
    map: map
});

生成的只是灰色的谷歌地图。是什么导致了这种奇怪的ToString行为?

编辑

Point类是自定义类,而不是来自库。以下是相关部分:

public class Point
{
    private Double latitude;
    private Double longitude;
    public Double Latitude
    {
        get
        {
            return latitude;
        }
    }
    public Double Longitude
    {
        get
        {
            return longitude;
        }
    }
}

无效的Double.ToString()导致razor代码生成javascript

JK和AlexC是对的,看看他们对我的问题的评论。数据从外部API传入错误。将全局文化设置为en-US解决了这个问题。

我只不明白一件事:我正在使用一个使用JSON.net的库,文档中的任何地方都说解析是用InvariantCulture完成的。所以我认为全球文化不会有什么不同。

1)你有没有注意到你有一个错误的方式:

var location = new google.maps.LatLng(@(longitude), @(latitude));

2)我会在生产服务器上检查数据是否正确-发射点。经度等直接作为文本输出到某个地方,看看它是否实际上是错误的ToString,并尝试(23.456).ToString()或类似的