Ajax请求使用POST使用MVC和$ .ajax调用返回HTTP错误500?

时间:2012-12-18 22:08:22

标签: asp.net-mvc jquery asp.net-ajax

我已经看过几个关于此问题的帖子,我已经尝试了所有答案(ASP.NET MVC JsonResult return 500

我的ajax请求正在重新发送500内部错误。如果我调试我甚至都没有采取行动。

这是我的ajax电话:

$.ajax({
                    url: '@Url.Action("UpdateSortOrder", "FormItems")',
                    data: { itemToUpdateId: item.attr("id"), newParentItemId: parentItemId, newPreviousItemId: previousItemId },
                    type: 'POST',
                    success: function (data) {
                        console.log(data);
                    },
                    error: function (xhr, status, exception) {
                        console.log("Error: " + exception + ", Status: " + status);
                    }
                });

我的行动:

[HttpPost]
    public ActionResult UpdateSortOrder(Guid itemToUpdateId, Guid newParentItemId, Guid newPreviousItemId)
    {
        FormItem updatedItem = _formItemService.GetOne(x => x.Id == itemToUpdateId);

        return Json(updatedItem, JsonRequestBehavior.DenyGet);
    }

使用chrome控制台,这些是回复的响应标题:

  

HTTP / 1.1 500内部服务器错误   缓存控制:私有   内容类型:text / html;字符集= utf-8的   服务器:Microsoft-IIS / 7.5   X-AspNetMvc-Version:3.0   X-AspNet-Version:4.0.30319   X-Powered-By:ASP.NET   日期:2012年12月18日星期二21:53:41 GMT   内容长度:17041

服务器日志显示没有子状态代码。知道我在这里做错了什么吗?我更喜欢使用POST而不是GET。

表格数据显示为:

  

itemToUpdateId:18ac5399-342e-4a39-9da1-3281a89501df

     

newParentItemId:空

     

newPreviousItemId:空

哪个是正确的。

我已经尝试将contentType设置为application / json和traditional = true,就像这个问题一样:Sending ajax post to mvc with "application/json; charset=utf-8" returns error 500 from vs web developer server

同样的错误。

4 个答案:

答案 0 :(得分:72)

我能够弄清楚问题是什么,我的AJAX语法,甚至行动都没有错。只是我返回的对象包含一个循环引用。通过单击“网络”选项卡下的POST请求,然后查看预览选项卡,我能够在chrome控制台中看到实际错误。这显示了实际的错误消息。

答案 1 :(得分:1)

Fiddler是一个很好的捕获http请求的工具,这对调试客户端和服务器端之间的响应非常有用。只需在浏览器中怀疑问题时打开它,当错误发生时打开fiddler并选择请求,然后查看其原始信息。

答案 2 :(得分:1)

老帖子,另类答案......以防有人在这里结束..

我的问题是由于我正在调用的控制器操作返回了部分视图操作结果而PartialView .cshtml文件未发布到服务器上(在Visual Studio项目中没有“包含”)出版时。)

答案 3 :(得分:0)

如果您不需要updatedItem成功,那么不要返回它只返回一个简单的变量