MVC +数据表:删除不止一次

时间:2014-07-24 15:34:39

标签: jquery asp.net-mvc datatables http-delete

我在我的MVC应用程序中遇到Datatables和删除问题。每个行都有一个按钮,当单击时会打开一个模态窗口,询问用户是否要删除该行。如果他们单击"确定",数据将从我的数据库中删除,删除的行将被删除,窗口将关闭。当我删除一行时,这一切都按预期工作。但是,当我在第一次删除后尝试删除任何其他行(没有刷新页面)时会出现问题。

当我第二次点击删除时,我的功能首先尝试删除第一行再次并失败,因为它不再存在。然后立即成功删除我要删除的新行。我有控制台输出,告诉我删除功能有什么ID,他们发现旧的ID首先被重新传递给该功能。

如果我删除一行(ID = 87)然后删除另一行(ID = 84)而不刷新控制台或页面,这是我的输出

clicked delete on 87
Deleting #87
DELETE http://localhost:49773/api/IncidentAPI/87
200 OK
Deleted

clicked delete on 87
Deleting #87
DELETE http://localhost:49773/api/IncidentAPI/87
500 Internal Server Error

clicked delete on 84
Deleting #84
DELETE http://localhost:49773/api/IncidentAPI/84
200 OK
"NetworkError: 500 Internal Server Error - http://localhost:49773/api/IncidentAPI/87"
Deleted

以下是每行中删除按钮的代码

$('.Delete').unbind().on("click", function () {
                var tr = $(this).closest('tr');
                var ID = dataLog.row(tr).data()[16];
                tr.addClass('deleteHighlight');

                $('#deleteWindow').dialog('open');

                $('.deleteOK').on("click", function () {
                    console.log("clicked delete on " + ID);

                    deleteIncident(ID); // deletes the row with that ID
                    $('.Details').bind();
                });

                $('.deleteClose').on('click', function (event, ui) {
                    console.log("Close delete");
                    tr.removeClass('deleteHighlight', 500);
                    $('#deleteWindow').dialog('close');
                });

            });

这是我的删除方法

function deleteIncident(ID) {
        var rowID = '#' + ID;
        console.log("Deleting " + rowID);

        $.ajax({
            url: '/api/IncidentAPI/' + ID,
            type: 'DELETE',
            contentType: "application/json; charset=utf-8",
            success: function (results) {
                console.log("Deleted");

                dataLog.row(rowID).remove().draw();
                $('#deleteWindow').dialog('close');
            }
        });
    }

2 个答案:

答案 0 :(得分:0)

更改您的AJAX请求,如下所示

$.ajax({
    url: '/api/IncidentAPI/',
    type: 'POST',
    data:{id:ID},
    dataType: "json",
    success: function (results) {
        console.log("Deleted");
        dataLog.row(rowID).remove().draw();
        $('#deleteWindow').dialog('close');
    }
});

在PHP端使用 $ _ POST 获取ID的值。例如,$ id = $ _POST [' id']; 我希望它能解决你的问题。

答案 1 :(得分:0)

事实证明我绑定了错误的按钮。我需要绑定OK按钮,而不是打开模态窗口的按钮。

$('.deleteOK').unbind().on("click", function () {
    deleteIncident(ID);
    $('.deleteOK').bind();
});