2016-05-07 142 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

确实如此,但你的回答是正确的。这只是你的最后一句话得到了错误的参数 –