我在按钮单击处理程序中有以下代码。两种方法都可以正常工作。 Page_ClientValidate()引起额外的验证检查并进行处理,而Page_IsValid利用现有属性。

问题

  • 如果单击按钮,是否始终保证Page_IsValid到那时已被计算?如果不能保证,我们需要显式调用Page_ClientValidate()
  • 设置Page_IsValid之前会发生什么事件?对于此类事件,我们不应该依赖Page_IsValid

  • 更新

    是否确定仅在验证部分完成之后(即在作为验证的一部分调用Page_ClientValidate()之后)才调用按钮单击事件处理程序(在JavaScript中)?如果可以保证,我可以依靠Page_IsValid吗?

    脚本
      $('#btnSave').click(function (e) {
    
      //Aproach 1
      var isValid = Page_ClientValidate('');
      if (isValid)
      {
           //Do reamining work
      }
    
      //Aproach 2
      if (Page_IsValid)
      {
          //Do reamining work
      }
    
      });
    

    引用:
  • Hide redundant error message in ASP.Net ValidationSummary
  • Validator causes improper behavior for double click check
  • Page_ClientValidate is not defined
  • Page_ClientValidate is validating multiple times.
  • MSDN - ASP.NET Validation in Depth
  • 最佳答案

  • 如果单击按钮,则(且仅在)将按钮的Page_ClientValidate()设置为CausesValidation时调用true
  • Page_ClientValidate()是回发过程的一部分,因此在单击按钮时即被调用。
    在调用Page_IsValid之后,我仅在函数范围内依赖Page_ClientValidate()。否则,我总是调用Page_ClientValidate()

  • 注释:反复调用Page_ClientValidate()可能会导致页面过于拥挤(多个警报等)。这就是为什么拥有一个自定义的验证功能来处理所有验证的好处。

    07-27 14:36