从Controller GET返回时,服务器响应状态为500

时间:2013-03-16 18:04:54

标签: c# asp.net-mvc jquery

您一直在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欢呼声

1 个答案:

答案 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模型不应包含对象图中的任何循环引用。如果是这样,您必须排除它们,理想情况是使用视图模型并仅发送视图所需的属性。

相关问题