1

我做了这个代码文件 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.75064longitude=10.761744。但消息是:3475064。为什么?我该如何纠正它。

4

2 回答 2

1

如果您的服务器或应用程序使用“en-US”以外的文化,那么我认为问题符合

onload="initialize(@Model[0],@Model[1])"

在这里,您在浮点类型上隐式使用 C# .ToString 方法并将其传递给 javascript。但是,C# 会考虑文化信息,而 javascript 只处理文化。

您应该在转换中明确设置文化,例如:

  @model IList<float>
    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Lay3.cshtml";
        CultureInfo culture = CultureInfo.GetCultureInfo("en-US");
        string latitude = Model[0].ToString(culture);
        string longitude = Model[1].ToString(culture);
    }
    <body onload="initialize(@latitude,@longitude)">
edit: GetCultureInfo
于 2012-09-15T12:03:15.600 回答
0

尝试使用(或使用 '.' 十进制数字分隔符设置区域性)

<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 调用初始化方法,您实际上是在传递四个参数。因此 a = 34 和 b = 75064。

在将参数从服务器传递到客户端时,您需要检查文化,因为当文化有 ',' 而不是 '.' 对于十进制数字分隔符,您的代码将无法按预期工作。

在您使用地图的情况下,您需要十进制值,因此您不能使用

<body  onload="initialize('@Model[0]','@Model[1]')">

您需要像这样将小数转换为适当的文化

var culture = CultureInfo.GetCultureInfo("en-US");
...
<body  onload="initialize(@Model[0].ToString(culture), @Model[1].ToString(culture))">
于 2012-09-15T11:54:16.300 回答