1

我正在尝试对我的 mvc3 删除操作实现 jquery onclick 确认对话框。值得一提的是,我很成功。渲染对话框本身,我正在努力的是在单击继续按钮后从 js 处理 /User/Delete 操作的操作。这是代码:

onclick-delete.js

$(function () {
    var deleteLinkObj;
    // delete Link
    $('.delete').click(function () {
        deleteLinkObj = $(this);  //for future use
        $('#delete-dialog').dialog('open');
        return false; // prevents the default behaviour
    });

    //definition of the delete dialog.
    $('#delete-dialog').dialog({
        autoOpen: false, width: 400, resizable: false, modal: true, //Dialog options
        buttons: {
            "Continue": function () {
                $.post(deleteLinkObj[0].href, function (data) {  //Post to action
                    // THIS IS WHERE I SHOULD SEND DATA TO MY DELETE ACTION (Users/Delete)
                    else {
                        alert("error");
                    }
                });
                $(this).dialog("close");
            },
            "Cancel": function () {
                $(this).dialog("close");
            }
        }
    });
});

所以,我做错了什么。点击错误后抛出,任何想法

4

4 回答 4

6

如果我错了,请纠正我,但这样不是更简单更有效

@Html.ActionLink("Delete", "Delete", 
   new { id = item.Id }, 
   new { onclick = "return confirm('Are you sure you wish to delete this article?');" }) 
于 2012-08-20T17:25:51.713 回答
3

根据 Mark Oreta 的回答中的讨论,这就是我要做的:

如果您像往常一样设置表单,您仍然可以轻松获得用户的确认。采用以下 HTML/JS:

<form action="/User/Delete" method="post">

    <!-- some fields here -->

    <input id="btnSubmit" type="submit" value="Delete" />

</form>

这应该正确地将表单提交到后端。有趣的是,如果你点击提交按钮,在 javascript/jQuery 中设置的任何点击事件都会在提交表单之前执行。

所以你可以这样做:

$("#btnSubmit").click(function(event) {

    event.preventDefault(); // --> This stops the form submit from happening.

});

如果您只需要一个用户确认的文本框,则无需使用标准confirm()功能以外的任何东西。这会向用户发送消息并要求他同意或取消。该函数根据用户的响应返回真/假。

所以你可以写出最简单的代码:

$("#btnSubmit").click(function(event) {

    var confirmationmessage = "Are you sure you want to delete this?";

    if( ! confirm(confirmationmessage) ) {

        // !confirm == the user did not confirm. Therefore stop the form submission.

        event.preventDefault(); // --> This stops the form submit from happening.

    } else {

        // The user agreed. There is no else block needed, then normal form submission may occur.

    }
});

此代码比您问题中的代码段更简单,更易于阅读。当然,如果您更喜欢使用任何其他方式来要求用户确认,那也可以。只要确保你最终得到一个if(someboolean) { event.preventDefault(); }

于 2012-08-21T07:53:23.203 回答
0

我在这里为你创建了一个JSfiddle

我希望你拿出一些相关的代码,因为你的 post 功能设置不正确。我让它像这样工作:

$(function () {
    var deleteLinkObj;
    // delete Link
    $('.delete').click(function () {
        deleteLinkObj = $(this);  //for future use
        $('#delete-dialog').dialog('open');
        return false; // prevents the default behaviour
    });

    //definition of the delete dialog.
    $('#delete-dialog').dialog({
        autoOpen: false, width: 400, resizable: false, modal: true, //Dialog options
        buttons: {
            "Continue": function () {
              $.post(deleteLinkObj[0].href, function (data) { 
                  //do the data parsing here      
                  alert(data);     

                    });
                $(this).dialog("close");
            },
            "Cancel": function () {
                $(this).dialog("close");
            }
        }
    });
});​

您在这里看到的数据解析是您需要处理控制器返回的内容的地方。通常,当我做这样的事情时,我从控制器上的删除操作返回的是一个布尔值,所以在上面的 Jquery 中,你可以做类似的事情

if (data == true)
alert("success!");
else
alert("error");
于 2012-08-20T13:23:17.380 回答
-1

试试这个:

<script type="text/javascript">

    $(document).ready(function () {
        $('form[action$="/Delete"]').submit(function () {
            return confirm('Are you sure you want to delete ?');
        });
    }); 

</script>

想想这就是全部,使用 jQuery 事件.. http://api.jquery.com/submit/

于 2012-08-20T13:15:46.327 回答