我正在制作一个电子商务网络应用程序(在MVC3中),现在我正在测试它。我的问题是:每当有人在提交按钮上多次点击时,我会发出尽可能多的请求并将其保存在db上。所以我正在实现一些客户端和服务器端代码来防止这些多次提交。只要有人点击这样的提交按钮,客户端就会阻止屏幕:
$(document).ready(function () {
$('input[type=submit]').click(function () {
blockScreen();
});
$.unblockUI();
}
function blockScreen() {
$.blockUI({ message: '<h1><img src="../images/processing.gif" /></h1>'
});
我遇到的问题是,当有人点击提交但有一个ModelState错误(例如未填写的必填字段)时,屏幕被阻止,除非重新加载或使用浏览器的控制台,否则无法解除阻止
服务器端验证所以它不会复制我稍后会做,所以不需要考虑这个问题......
答案 0 :(得分:1)
我找到了答案......按照krish的建议,我添加了这个脚本:
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
到我的主视图并在我的js上使用它:
$('form').submit(function () {
if ($(this).valid()) {
blockScreen();
}
});
答案 1 :(得分:0)
可能您正在使用AJAX请求将数据发送到您的数据库,对吗?
无需使用'click'事件。 有人可以通过在输入字段中按Enter键来提交表单,我不确定在这种情况下会触发click事件。
我认为你应该使用类似的东西:
var isBlocked = false;
$('form').submit(function(){
$.ajax({
url: 'database.html',
beforeSend: function (data) {
var state = isBlocked;
isBlocked = true;
// Returning false in the beforeSend function will cancel the request.
return !state;
},
complete: function(data) {
// complete executes on both success and fail
isBlocked = false;
}
});
});
`