我使用MVC3,并且我有一个带有文件上传的表单。如果该文件已经存在于服务器上,我想提示用户确认他们要覆盖该文件。我已经在表单提交上添加了一个jQuery方法来处理我在线阅读的内容,但是似乎邮件在初始化之前可以显示确认对话框。如果文件已经存在,jQuery拦截并阻止表单提交
如果我在顶部调用e.preventDefault()
我的表单提交函数会停止表单,但是我不知道如何重新激活该操作。这里是我有:
表单
@using (Html.BeginForm("Upload", "Management", FormMethod.Post, new {id = "formUpload", enctype = "multipart/form-data"})) {
<div class="editor-label">Pricing Model Workbook</div>
<div class="editor-field">
<input type="file" name="file" id="file" size="50" />
@Html.ValidationMessageFor(file => file.FileName)
</div>
<div><input type="submit" name="upload" id="upload" value="Upload" /></div>
}
jQuery的
<script type="text/javascript" language="javascript">
$(document).ready(function() {
$('#formUpload').submit(function (e) {
var filePath = $('#file').val();
$.getJSON('@Url.Action("CheckIfFileExists")', { path: filePath },
function (exists) {
if (exists) {
var cancel = confirm('File "' + filePath + '" has already been uploaded. Overwrite?');
if (cancel) {
e.preventDefault();
return false;
}
}
return true;
}
);
});
});
</script>
所以我的问题是,我究竟做错了什么?此外,作为奖励,如果客户端验证发现错误,是否有任何方法可以防止这种情况出现?
任何帮助将不胜感激!
UPDATE 我最终这样做,这对我正在尝试做的工作。
<script type="text/javascript" language="javascript">
$(document).ready(function() {
var fileInvalid = false;
// check if file exists when user selects a new file
$('#file').change(function() {
var filePath = $('#file').val();
$.getJSON('@Url.Action("CheckIfFileExists")', { path: filePath },
function (exists) {
if (exists) {
var overwrite = confirm('Warning :: File "' + filePath + '" has already been uploaded.'
+ 'The existing data will be overwritten on submission. Continue?');
if (!overwrite) {
$('#file').replaceWith($('#file').clone(true));
}
}
}
);
});
});
</script>
只是抬起头来,你仍然有一个竞争条件。如果用户在文件检查返回之前提交表单,用户将永远看不到对话框。 – jmar777