[英]ASP.NET Ajax returning null
试图阅读其他类似的问题,但无法完全发现我的问题所在。 我试图建立一个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请求得到处理,就会使用null参数调用正在调用的方法,即MapController下的Search Action:
[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);
}
只要标题保持为空,我就真的不能做任何事情...感谢您解决此问题的任何帮助。
您在搜索方法中寻找的不是“ title”的“ Location”参数。
数据:JSON.stringify({“ Location”:x})
请将参数名称从“标题”更改为“位置”,然后检查。
尝试替换您的AJAX请求的这两个参数:
data: JSON.stringify({ "Location": x }),
contentType: "application/json; charset=utf-8",
用这个简单的表达式:
data: { title: x },
请注意,您的操作参数称为title
,这就是您应该发送的参数。
更新:
要解决您遇到的500 Internal Server错误,请停止将域实体传递给视图,因为它们可能包含无法进行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,其中记录了错误的确切原因。
进行检查,以便您下次知道如何调试此类问题(我已突出显示了您应该关注的重要部分):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.