在使用服务器端验证的回发期间禁用按钮

时间:2014-01-20 21:04:57

标签: asp.net validation

经历了几个主题并且无法完全找到这种情况。我的页面是ASP.NET 4.5,C#。我为(IMHO)安全原因使用“服务器端”验证,并在动态表单上有几个验证组。

我认为我们都熟悉在回发期间禁用按钮以防止双击的优点。我通过各种方式使用OnClientClick阅读了相当多的线程示例。

我希望我的页面能够做到这一点:

1 - 用户点击提交(或任何按钮) 2 - 在适当的验证组上触发服务器端自定义验证 3 - 如果验证通过,请禁用客户端按钮并继续回发 4 - 如果验证未通过,则照常显示错误。仍应启用客户端按钮。

3号似乎是踢球者。这甚至可以通过服务器端验证吗?似乎无法验证服务器端,回来执行javascript,然后回到postback。如果有可能,那么我对某些机制很浑浊。具体来说,如何告诉客户端特定验证组在服务器端传递正常。不太具体,整个事情,哈哈。

谢谢!

1 个答案:

答案 0 :(得分:0)

由于你使用的是ASP.NET,我假设你也在使用jQuery(这是默认的)。

$('#MyForm').submit(function (event){
  event.preventDefault();
  var form = $(this);
  if (!form.data('submit-lock')){// check if we're waiting on the server's response
    form.data('submit-lock', true);// set the lock since we're about to post to the server
    $.ajax(/*your url and data and whatnot here*/)
      .always(function(){
        form.data('submit-lock', false);// the server responded, unlock
      });
  }
});

$ .ajax()返回一个jQuery Deferred promise对象。 promise.always(function)在ajax解析(成功)或拒绝(失败)时注册要调用的函数。 关于延期模式的更多阅读: http://joseoncode.com/2011/09/26/a-walkthrough-jquery-deferred-and-promise/