2016-05-07 97 views
0

嘗試閱讀其他類似的問題,但無法完全檢測到我的問題。我試圖如下建立一個Ajax調用:返回null的ASP.NET Ajax

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("Search", "Map")', // Map Controller, Search Action 
    data: JSON.stringify({ "Location": x }), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data) { 
     var table = "<table class='table'>"; 
     $.each(data, function (index, value) { // For each element in data: 
      table += "<tr><td>" + value.title + "</td></tr>"; // add it to the table list 
      var latlng = new google.maps.LatLng(value.latitude, value.longitude); 
      var marker = new google.maps.Marker({ 
       position: latlng, 
       map: map 
      }); 

      gmarkers.push(marker); 
     }); 
     table += "</table>"; 
     $("#myData").html(table); 
    } 
}); 

它應該發送從獲取的文字:

$("#txtSearch").keyup(function() { 
    var x = $("#txtSearch").val(); 

現在文本是正確地獲取,因此「X」確實有一個值當它提交。但是,一旦上述Ajax請求被處理被調用的方法,它是MapController下的搜索行動被稱爲帶有null參數:

[HttpPost] 
public ActionResult Search (string title) 
{ 
    Entities mapEntity = new Entities(); 
    string userId = User.Identity.GetUserId(); 
    var result = mapEntity.Markers.Where(x => x.title.StartsWith(title) && x.UserId == userId).ToList(); 
    return Json(result, JsonRequestBehavior.AllowGet); 
} 

只要標題保持爲空我真的不能對它做任何事...感謝解決此問題的任何幫助。

回答

2

嘗試更換的2個參數的AJAX請求:

data: JSON.stringify({ "Location": x }), 
contentType: "application/json; charset=utf-8", 

這個簡單的表達:

data: { title: x }, 

注意你的行動參數被稱爲title所以這就是你應該送什麼。


UPDATE:

要解決,你得到了500內部服務器錯誤,停止通過你的域實體的意見,因爲它們可能包含循環引用不能JSON序列。與往常一樣,使用視圖模型項目域實體,並且包括僅用於查看相關信息:

var viewModel = result 
    .Select(x => new 
    { 
     Prop1 = x.SimpleProp1, 
     Prop2 = x.SimpleProp2, 
     Prop3 = x.NestedProp.Prop3, 
    }) 
    .ToList(); 

return Json(viewModel, JsonRequestBehavior.AllowGet); 

順便說一句,如果你已經在你的瀏覽器的網絡選項卡檢查的AJAX請求時,你會已經看到服務器的響應是一個YSOD,其中寫入了錯誤的確切原因。

檢查出來,讓你知道如何下一次調試這些類型的問題(我強調,你應該看的重要組成部分):

enter image description here

+0

您的建議非常完美!但是現在返回到行動正在工作,但它沒有正確返回數據。它說500(內部服務器錯誤)。我返回的是Json類型的數據,並通過$ .each(data,function(index,value){})運行它。任何想法爲什麼會這樣? – Ben

+0

http://i.imgur.com/ylM9XcO.png要顯示通過調試器返回的數據 – Ben

+1

我可以看到,如果使用視圖模型,則返回一些域實體到視圖。域實體可能包含顯然不能被JSON序列化的循環引用。這就是爲什麼你得到500內部服務器錯誤。要解決此錯誤,請停止將域實體傳遞給視圖並將結果投影到視圖模型。 –

3

您正在尋找「位置「參數不適用於搜索方法中的」標題「。

數據:JSON.stringify({ 「位置」:X})

請從 「標題」 更改參數的名稱爲 「位置」,然後檢查。

+1

難道你不是指從地點到標題的變化嗎? –

+1

或者您在搜索方法中更改或者可以在ajax調用方法中。這兩個結果都是一樣的。也可以選擇@darin dimitrov的回答。 – Ronak

+1

確實如此,但你的回答是正確的。這只是你的最後一句話得到了錯誤的參數 –