2012-09-15 30 views
1

我這樣做代碼 文件Real.csJavaScript的浮動錯誤

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:它包含兩個attributs花車(經緯度),我想知道它的最後的值。

文件Index.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。 爲什麼?我該如何糾正它。

+0

這是一個在黑暗中拍攝,但嘗試改變浮翻一番,並再次檢查是否正常工作? –

+0

沒有它是相同的錯誤 –

回答

0

嘗試使用(或一組文化與 '' 十進制數字隔離器)的

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

<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 

相反,如果調用34,75064和10,761744你實際上是初始化方法傳遞四個參數。正因爲如此一個= 34和b = 75064.

從服務器傳遞參數時,客戶端,因爲當文化有「」的INSEAD你需要檢查文化「」對於十進制數字分隔符,您的代碼不會按預期工作。

在你的情況地圖,你需要十進制值,所以你不能使用

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

您需要將十進制隱蔽到合適的培養這樣

var culture = CultureInfo.GetCultureInfo("en-US"); 
... 
<body onload="initialize(@Model[0].ToString(culture), @Model[1].ToString(culture))"> 
+0

如果我<體的onload = 「初始化( '@模型[0]', '@模型[1]')」>地圖上成爲空!! –

+0

地圖是空的,因爲你實際上是通過'34,75064' 和'10,761744' 。這些值不能被解析爲十進制因爲分隔符是「」而不是「」。例如,如果您嘗試'1,5'* 2,您將獲得NaN,並且如果您嘗試'1.5'* 2,您將得到結果3 –

+0

soltuion將使用ParsetoFloat(a)和ParsetoFloat(b) –

1

如果您的服務器或應用程序使用除「en-US」以外的文化,那麼我認爲問題是符合

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

在這裏,您隱式上使用float類型C#的ToString方法,並將其傳遞給JavaScript。但是,C#考慮到了文化信息,JavaScript只處理en文化。

你應該明確地設置轉換的文化,喜歡的東西:

@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