我有一个.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也会停止所有子传输,但是删除它会完全阻止对话框,只会闪烁对话框一秒钟。我搜索了类似的帖子,但还没有找到任何解决方案。
非常感谢任何帮助。
答案 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();
}
}
});