1

我正在制作一个电子商务 web 应用程序(在 MVC3 中),现在我正在测试它。我的问题是:每当有人多次点击提交按钮时,我都会发出尽可能多的请求并将其保存在数据库中。所以我正在实现一些客户端和服务器端代码来防止这些多次提交。每当有人单击这样的提交按钮时,客户端都会阻止屏幕:

$(document).ready(function () {
    $('input[type=submit]').click(function () {
        blockScreen();
    });

    $.unblockUI();
}
function blockScreen() {
    $.blockUI({ message: '<h1><img src="../images/processing.gif" /></h1>' 
});

我在使用 blockUI 时遇到的问题是,当有人单击提交但出现 ModelState 错误(例如未填写的必填字段)时,屏幕被阻止并且无法解除阻止,除非重新加载或使用浏览器的 console

服务器端验证,所以它不会有我稍后会做的复制,所以不需要考虑这个问题......

4

2 回答 2

1

我找到了答案……按照 krish 的建议,我添加了这个脚本:

<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>到我的主视图并在我的js上使用它:

$('form').submit(function () {
    if ($(this).valid()) {
        blockScreen();
    }
});
于 2012-09-25T20:07:31.740 回答
0

可能您正在使用 AJAX 请求将数据发送到您的数据库,对吧?

无需使用“点击”事件。有人可以通过在输入字段中按 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;
    }
  });


});

`

于 2012-09-25T18:02:12.440 回答