您一直在mvc上使用ajax进行简单搜索。我有点迷惑这个错误,因为ajax可以在ajax调用上与Controller通信但是当控制器向JS返回一个值时它给了我error500
这是我的代码:
$.ajax({
type: "GET",
url: 'SearchCustomer',
data: { 'name': name, 'id': customerId },
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
alert(data);
$(data).each(function () {
});
}
});
然后我的控制器
public JsonResult SearchCustomer(string name, string id)
{
var customers = tr.SearchCustomers(name, id);
return new JsonResult() { Data = customers, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
在问这个问题之前已经尝试了许多解决方案,但是没有人确实能够工作..所以帮助! :P欢呼声
答案 0 :(得分:1)
您应该摆脱contentType
设置,因为您没有发送JSON。此外,控制器操作的URL看起来也不是很有效。如果您使用默认路由,它通常应该像{controller}/{action}
。我建议您使用Url帮助程序生成它。
同样在您的控制器操作中,您已使用Data
属性发送结果,因此您应该在成功回调中使用它来循环:
$.ajax({
url: '@Url.Action("SearchCustomer")',
type: 'GET',
data: { 'name': name, 'id': customerId },
success: function (result) {
$(result.Data).each(function () {
});
}
});
您应该寻找的另一件事是您从控制器操作发送到视图的模型:
var customers = tr.SearchCustomers(name, id);
目前尚不清楚此客户集合的类型是什么,但您应该确保它是JSON可序列化的。这意味着Customer
模型不应包含对象图中的任何循环引用。如果是这样,您必须排除它们,理想情况是使用视图模型并仅发送视图所需的属性。