2016-05-07 53 views
1

編輯:實際的錯誤,我從網絡上獲取的數據:返回谷歌地圖標記

enter image description here

「無效的JSON原始:位置」

代碼調用它:

function AddMarkerAndPanTo(latLng, map) { 
    var marker = new google.maps.Marker({ 
     position: latLng, 
     map: map 
    }); 

    var x = marker.position; 

    $.ajax({ 
     type: "POST", 
     url: '@Url.Action("AddMarker", "Map")', // Map Controller, AddMarker Action 
     data: JSON.stringify({ "position": x }), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      if (data.done) 
       alert("Marker added"); 
      else 
       alert("MARKER FAILED"); 
     } 
    }); 
    map.panTo(latLng); 
} 

使用貼在它下面的圖模型中的服務器側的功能:

[HttpPost] 
public ActionResult AddMarker(LatLngViewModel position) 
{    
    if (position != null) 
     return Json(true, JsonRequestBehavior.AllowGet); 
    else 
     return Json(false, JsonRequestBehavior.AllowGet); 
} 

視圖模型:

public class LatLngViewModel 
{ 
    double latitude { get; set; } 
    double longitude { get; set; } 
} 

我嘗試使用與報價和而對位置,字符串化的結果,或者用的toJSON其返回()。試着拼接toSend和各種引號等。在這一點上,我不知道是什麼原因導致它,我沒有其他解決方案。欣賞任何幫助解決這個問題,併發送血腥的座標回來綁定到模型莫名其妙。

+0

哪個服務器端語言,你用? – scaisEdge

+0

這是C#,使用ASP.NET – Ben

回答

1

你需要通過與緯度和經度屬性的對象,以匹配您的視圖模型。這樣的:

function AddMarkerAndPanTo(latLng, map) { 
    var marker = new google.maps.Marker({ 
     position: latLng, 
     map: map 
    }); 

    $.ajax({ 
     type: "POST", 
     url: '@Url.Action("AddMarker", "Map")', // Map Controller, AddMarker Action 
     data: { 
      latitude: latLng.lat(), 
      longitude: latLng.lng() 
     }, 
     success: function (data) { 
      if (data.done) 
       alert("Marker added"); 
      else 
       alert("MARKER FAILED"); 
     } 
    }); 

    map.panTo(latLng); 
} 

這是你缺少的重要組成部分:

data: { 
    latitude: latLng.lat(), 
    longitude: latLng.lng() 
}, 

傳遞給這個函數的latLng對象有2個屬性latlng這又是你需要的功能調用以獲得相應的座標作爲十進制值。


UPDATE:

請確保您的視圖模型屬性公共

public class LatLngViewModel 
{ 
    public double latitude { get; set; } 
    public double longitude { get; set; } 
} 
+0

感謝您的回覆,我已經在爲這兩個值進行函數調用,並且雙重檢查了拼寫。刪除了contentType和dataType後,很幸運地停止了這個錯誤,但是返回的所有數據現在都是0.我嘗試將viewModel中的值設置爲float,double和decimal無效。 – Ben

+0

查看我更新的答案。視圖模型上的屬性應該是** public **,否則模型聯編程序會忽略它們。 –

+0

釘住了......這是我的4個小時在那個單詞上被燒燬的時間。再次感謝Darin。我現在需要躺下一點:P – Ben

0

請勿使用JSON.stringify來準備後期數據。

只需使用:

data: { "position": latLng.toJSON()}, 
+1

你能解釋它背後的推理嗎?我嘗試了你的建議,現在它已經爲我提供了一個500(內部服務器錯誤),我已經改變了它。 – Ben

+1

最後一次我有這個錯誤,這是因爲它們可能包含循環引用,這意味着我需要以某種方式消除任何循環信息,並通過單獨發送長和寬來清理它,不知道如何繼續這樣做。 。 – Ben