【问题标题】:how to check a particular asp.net validation control is valid?如何检查特定的asp.net 验证控件是否有效?
【发布时间】:2011-09-20 10:41:18
【问题描述】:

在 web 表单中有不同的 asp.net 验证控件。是否可以检查特定的验证控件是否有效?例如离开文本框的焦点,首先我会检查 requiredFieldValidatorUserName 是否有效?如果它有效,那么我将使用 ajax 在服务器上检查该用户名是否尚未预订。

编辑:

说明:我想检查客户端验证控件的有效性(该输入是否有效)。

请指导。

【问题讨论】:

  • 你为什么不对你的两个需求进行服务器端验证,我不确定你是否可以对验证控件进行验证。
  • 如果您希望它在发回之前进行检查,您需要在客户端进行。对于必填字段验证器之类的内容,您应该能够设置 EnableClientScript="true" 并且它应该在离开文本框后立即验证。
  • @Mhuammad Awais,我提到我想做 ajax 工作:) 你觉得我应该去服务器吗/

标签: asp.net validation webforms asp.net-2.0 asp.net-3.5


【解决方案1】:

所有验证器控件都实现了包含 IsValid 属性的 IValidator。

myValidatorControl.IsValid 

【讨论】:

  • 它在客户端吗?我觉得它在服务器端。
  • 不抱歉,要么我错过了那个请求,要么是迟到了。
【解决方案2】:

最好的方法是使用带有客户端代码的CustomValidator,因为这将显示所有错误消息,阻止表单提交并确保在服务器端重复验证 - 请记住,只是因为你有客户端验证可用,并不意味着用户已经看到它:始终在服务器上验证您的输入

然后您的CustomValidator 将被编码为调用 Ajax 方法,并向客户端正确显示错误消息:

<asp:Label ID="UserNameLabel" AssociatedControlID="UserName" runat="server">
  UserName *:</asp:Label>
<asp:TextBox ID="UserName" runat="server" />
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server" 
                            ControlToValidate="UserName" EnableClientScript="true"
                            ErrorMessage="You must supply a username!" />
<asp:CustomValidator ID="UserNameCustom" runat="server"
                     ControlToValidate="UserName" 
                     ClientValidationFunction="CheckExisting"
                     OnServerValidate="UserNameCustomValidate"
                     ErrorMessage="Username already taken" />

您的 ClientValidationFunction 应该类似于:

<script type="text/javascript">
  function CheckExisting(source, arguments) {
    // Pass the arguments.Value to your AJAX call:
    if (ajaxCallUserNameTaken(arguments.Value)) {
      arguments.IsValid = false;
    }
  }
</script>

(显然,您需要编写 ajaxCallUserNameTaken 方法来调用您的页面方法/Web 服务/等。)

这样做将确保验证方法按预期进行;每当用户从文本框 留下一个值 时,都会调用它(如果文本框为空,则不会调用它),并确保用户无法提交页面,直到他们提供独特的价值。您还需要创建OnServerValidate 中引用的方法,以确保该值在到达服务器后也是良好的 - 这应该调用与 AJAX 端点用于减少代码重复等相同的代码。

我原本打算建议您可以在客户端使用Page_Validators 对象来检查onBlur 事件,但我认为这在这里并不合适,因为它会导致更多疼痛:

  1. 它假定虽然页面上可能有多个验证器,但我们正在检查的控件上只有RequiredFieldValidator
  2. RequiredFieldValidator 在OnBlur 期间不会触发,如果用户在没有设置值的情况下离开控件 - 只有当他们设置并清除值时,所以即使isvalidtrue,您也需要检查对于一个空字符串!

【讨论】:

    【解决方案3】:

    您可以通过为要与其他控件分开处理的验证器控件设置ValidationGroup 来做到这一点。确保它与它正在验证的控件的 ValidationGroup 匹配(您的用户名字段)。

    【讨论】:

    • 我不想单独处理控件,我只想检查输入是否有效?然后我将在输入上使用 ajax 工作。
    • 是的,但您似乎希望单独与页面上的其他人一起检查它,而不是一次全部检查(通过 AJAX 或其他方式)
    【解决方案4】:

    我刚刚遇到了同样的问题,我将CausesValidation="true" 设置为文本框控件并且它起作用了。试试看吧:)

    【讨论】:

      【解决方案5】:

      我一直在搞砸这个问题,并找到了一个相当简单(不是那么有效)的解决方案来使用 jQuery 来处理这个问题。

      使用这个函数来检查你的控件的有效性:

      function validateControl() {
          return $('#YOUR_VALIDATOR_ID').css("visibility") == "visible"
      

      如果您在验证器上使用Display="Dynamic",那么函数如下所示:

      function validateControl() {
          return return $('#YOUR_VALIDATOR_ID').css("display") == "inline"
      

      如果您使用的是 Masterpage,请务必检查您的验证器的真实 ID,因为它与您 IDE 中的 ID 不同。在浏览器中查看页面源代码即可。

      最好的解决方案当然是以其他方式验证您的表单,使用 JavaScript 或让您编写自己的代码的 CustomValidator。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-30
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 2012-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多