我做了这段代码
文件Real.cs
public ActionResult Index() {
IList<Eventdata> liste = DATA2.Eventdata.GetEventdata();
int a = liste.Count;
float lat = liste[a-2].Latitude;
float longi = liste[a-2].Longitude;
IList<float> model = new List<float>();
model.Add(lat);
model.Add(longi);
return View(model);
}
我映射了表EventData:它包含两个属性浮点数(纬度,经度),我想知道其最后一个值。
文件索引.CShtml
@model IList<float> @{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Lay3.cshtml";
}
<body onload="initialize(@Model[0],@Model[1])">
<div id="map_canvas" style="width: 800px; height: 500px;">
</div>
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript">
</script>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
</script>
<script type="text/javascript">
function initialize(a, b) {
alert(a);
alert(b);
var myLatLng = new google.maps.LatLng(a,b);
var myOptions = {
zoom: 30,
center: myLatLng,
mapTypeId: google.maps.MapTypeId.TERRAIN
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
var flightPlanCoordinates = [
new google.maps.LatLng(a,b)
];
var flightmarker = new google.maps.Marker({
position: new google.maps.LatLng(a,b),
map: map, title: " denden"
});
}
</script>
</body>
我有最后一点:
Latitude=34.75064
和longitude=10.761744
。但是消息是:34
和75064
。为什么?以及我该如何纠正。
最佳答案
尝试使用(或使用“。”十进制数字分隔符设置区域性)
<body onload="initialize('@Model[0]','@Model[1]')"> // This will pass your value as
//two parameters(instead of four) but it can be used only as a string because
//javascript can parse decimal values only with '.' separator
代替
<body onload="initialize(@Model[0],@Model[1])">
如果使用34,75064和10,761744调用initialize方法,则实际上是在传递四个参数。因此,a = 34,b = 75064。
在将参数从服务器传递到客户端时,您需要检查区域性,因为区域性具有','标记为'。对于十进制数字分隔符,您的代码将无法按预期工作。
在您使用map的情况下,您需要十进制值,因此您不能使用
<body onload="initialize('@Model[0]','@Model[1]')">
您需要将小数转换为适当的文化,例如
var culture = CultureInfo.GetCultureInfo("en-US");
...
<body onload="initialize(@Model[0].ToString(culture), @Model[1].ToString(culture))">