拦截文件上传使用jQuery对话框提交

时间:2012-03-16 21:22:27

标签: jquery

我有一个.net mvc应用程序,允许用户提交附件。为此,我没有使用任何特殊的插件等,只使用标准的表格。

但是,我想通过确认对话框拦截请求,并且只发布OK。

为了做到这一点,我使用的是preventDefault,否则对话框只会出现一秒钟,然后是表单帖子。

似乎非常直截了当。我遇到的问题是,因为它是文件上传,我需要继续提交并基本上撤消preventDefault。

所以我遇到的问题是我必须使用preventDefault来停止标准提交,但它也会在用户选择OK继续时完全停止提交。同样,由于文件上传,我必须允许默认行为,因为尝试以任何其他方式执行,即$ .post('@ Url.Action(“etc”,“etc”)',$('#form ')。serialIile());然后会导致控制器无法接收上传的文件。

到目前为止,这是我的代码:

    $(document).ready(function () {
    $("form").submit(function (e) {

        var evt = e || event;
        if (evt.preventDefault)
            evt.preventDefault();
        else
            evt.returnValue = false;

        $('#divConfirm').dialog({
            height: 200,
            width: 450,
            title: 'Confirm',
            modal: true,
            autoOpen: false,
            buttons: {
                "Continue": function () {
                    $(this).dialog("close");
                    return true;
                    //$.post('@Url.Action("etc", "etc")', $('#form').serialize());
                },
                "Cancel": function () {
                    $(this).dialog("close");
                    //evt.preventDefault();
                }
            }
        });
        $('#divConfirm').dialog("open");
    });
});

因此即使在接受时,preventDefault也会停止所有子传输,但是删除它会完全阻止对话框,只会闪烁对话框一秒钟。我搜索了类似的帖子,但还没有找到任何解决方案。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

$("form").submit(function (e) {

    var evt = e || event;
    if (evt.preventDefault)
        evt.preventDefault();
    else
        evt.returnValue = false;

    var formElement = this; //****modified***
    $('#divConfirm').dialog({
        height: 200,
        width: 450,
        title: 'Confirm',
        modal: true,
        autoOpen: false,
        buttons: {
            "Continue": function () {
                $(this).dialog("close");
                 formElement.submit(); //****modified***
                return true;
                //$.post('@Url.Action("etc", "etc")', $('#form').serialize());
            },
            "Cancel": function () {
                $(this).dialog("close");
                //evt.preventDefault();
            }
        }
    });