【问题标题】:process to mvc action after jquery confirmation button is clicked单击 jquery 确认按钮后处理 mvc 操作
【发布时间】:2012-08-20 13:01:57
【问题描述】:

我正在尝试为我的 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");
            }
        }
    });
});

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

【问题讨论】:

  • 把相关代码放到jsfiddle.net上
  • 如果抛出“alert("error")”,那么问题出在语句 $.post(deleteLinkObj[0].href, function (data) {

标签: c# javascript jquery asp.net-mvc-3


【解决方案1】:

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

@Html.ActionLink("Delete", "Delete", 
   new { id = item.Id }, 
   new { onclick = "return confirm('Are you sure you wish to delete this article?');" }) 

【讨论】:

    【解决方案2】:

    根据 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.
    
        }
    });
    

    此代码比您问题中的 sn-p 更简单且更易于阅读。当然,如果您更喜欢使用任何其他方式来要求用户确认,那也可以。只需确保在结尾处添加 if(someboolean) { event.preventDefault(); }

    【讨论】:

    • 它对我有用。我发现你的回答得到了很好的解释。没有杂乱,非常可读。
    【解决方案3】:

    我在这里为你创建了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");
    

    【讨论】:

    • 为什么不直接用MVC方式设置表单,在提交按钮上多加一个jQuery点击事件(会在发帖前执行),当用户不确认发帖时使用e.preventDefault(); ?似乎更容易和更易于维护......
    • 我认为他的验证框中将有某种自定义控件,超出了显示的标准确认/取消,以及返回时的一些自定义行为 - 否则是的,它将是更容易。
    • 让帖子发生并且仅基于一些布尔值(无论是通过确认()还是任何插件,都无关紧要)来阻止它仍然会更容易。我看到你正在复制海报中的代码,不用担心 :) 但是像这样构建它似乎很牵强。
    • @Flater 你能告诉我你有什么想法吗?谢谢。
    【解决方案4】:

    试试这个:

    <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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      相关资源
      最近更新 更多