Ajax调用返回内部500错误

时间:2013-03-11 13:05:06

标签: c# jquery asp.net-mvc-4

您好我正在尝试执行ajax调用服务器,但我似乎没有运气我一直在控制台上回到错误500内部服务器错误。这是我的ajax调用:

    $("body").on("click", "#ok", function (e) {
    var id = $(this).attr("data-bookid");
    $.ajax({
        url: "/ProductEditor/DeleteBook",
        type:"POST",
        data: { bookId: parseInt(id) },
        success: function (data) {
            console.log(data);
        },
        error: function (data) {
            console.log(data);
        }
    });
    e.preventDefault();
})

这是我要调用的C#代码:

public ActionResult DeleteBook(int bookId)
{
   bookRepository.DeleteBook(bookId);
   return RedirectToAction("Books", "ProductManager");
}

在尝试调试时,我注意到甚至没有调用DeleteBook方法。

我做错了什么?

编辑我添加了[HttpPost]属性,但仍然无效

3 个答案:

答案 0 :(得分:2)

如果没有更多信息,要告诉你自己做错了什么并不容易。

但是,jQuery ajax函数的error函数回调有三个参数:

(jqXHR,textStatus,errorThrown)

$.ajax({
    url: "/ProductEditor/DeleteBook",
    type:"POST",
    data: { bookId: parseInt(id) },
    success: function (data) {
        console.log(data);
    },
    error: function (jqXHR, textStatus, errorThrown) {
        console.log(errorThrown);
    }
});

第三个参数errorThrown将包含调用/ProductEditor/DeleteBook的HTTP响应文本。我建议查看errorThrown显示的内容,以及可能在调试模式下运行整个程序。

可能var id = $(this).attr("data-bookid");不正确,而且id的值设置为undefined

此外,您可以使用IE或Chrome中的F12开发工具中的网络选项卡,Firefox中的Firebug或Fiddler来调试ajax调用。您可以查看发送到服务器的ajax请求以及来自服务器的响应,以查看是否以正确的格式(JSON)发送了正确的数据(bookId)以及响应来自何处服务器

答案 1 :(得分:0)

将HttpPost添加到您的方法并尝试

[HttpPost]
public ActionResult DeleteBook(int bookId)
{
   bookRepository.DeleteBook(bookId);
   return RedirectToAction("Books", "ProductManager");
}

答案 2 :(得分:0)

您的 WebMethod 必须静态

[WebMethod(true)]
public static ActionResult DeleteBook(int bookId) 
{    
     bookRepository.DeleteBook(bookId);    
     return RedirectToAction("Books", "ProductManager"); 
}