我使用以下剃刀代码生成一些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
});
这只是制作一张灰色的Google地图。是什么导致了这种奇怪的ToString
行为?
修改
Point类是一个自定义类,而不是来自库。以下是相关部分:
public class Point
{
private Double latitude;
private Double longitude;
public Double Latitude
{
get
{
return latitude;
}
}
public Double Longitude
{
get
{
return longitude;
}
}
}
答案 0 :(得分:1)
JK和AlexC是对的,看看他们对我的问题的评论。外部API的数据出错了。将全球文化设定为en-US解决了这个问题。
我只是不明白一件事:我使用的是一个使用JSON.net的库,文档中的任何地方都说它使用InvariantCulture进行解析。所以我认为全球文化不会有所作为。
答案 1 :(得分:0)
1)你有没有注意到你有错误的方式:
var location = new google.maps.LatLng(@(longitude), @(latitude));
2)我会在生产服务器上检查数据是否正确 - 将point.Longitude等直接发送到输出文本某处以查看它是否真的是故障的ToString并尝试(23.456).ToString()或类似的。