0

嗨,我一直在 mvc 使用 ajax 进行简单搜索。我对这个错误有点困惑,因为 ajax 可以在 ajax 调用上与控制器通信,但是当控制器向 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 欢呼

4

1 回答 1

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

于 2013-03-16T18:07:32.983 回答