【问题标题】:Custom Validator validation not firing for textbox自定义验证器验证未触发文本框
【发布时间】:2009-06-14 01:56:48
【问题描述】:

我为 ASP.Net 中的多行文本框创建了一个自定义验证器,用于最大字符数。

下面是我正在使用的代码。

<asp:CustomValidator ID="cvPersonality" runat="server" ControlToValidate="txtPersonality"
    Display="Dynamic" ErrorMessage="*Maximum Characters 200" 
    OnServerValidate="cvPersonality_ServerValidate"></asp:CustomValidator>

Protected Sub cvPersonality_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs)
    Dim strDesc As String = Me.txtPersonality.Text
    If Len(strDesc) > 200 Then
     args.IsValid = False
    Else
     args.IsValid = True
    End If
End Sub

谢谢

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    记得在 CustomValidator 上设置这个属性...

    ValidateEmptyText="True"
    

    【讨论】:

    • 天哪,谢谢!你不知道我盯着这个愚蠢的自定义验证器看了多久。
    【解决方案2】:

    您可以将以下代码用于客户端验证,作为对服务器端验证的补充。客户端验证在一些简单的情况下很有帮助(比如最大文本长度),因为它减少了服务器开销,没有多余的回发只是为了简单的检查。示例代码:

     <script type="text/javascript">
        function clientValidate(sender, args) {
            if (args.Value.length > 200) {
                args.IsValid = false;
            }
        }
    </script>
    
    <div>
        <asp:TextBox runat="server" ID="TextBox1" TextMode="MultiLine"></asp:TextBox>
        <asp:CustomValidator runat="server" ID="CustomValidator1" ControlToValidate="TextBox1"
            Text="The text length exceeds the allowed maximum" 
            ClientValidationFunction="clientValidate" Display="Dynamic">
        </asp:CustomValidator>
        <asp:RequiredFieldValidator runat="server" ID="ReqFieldValidator1" ControlToValidate="TextBox1"
            Text="You must enter a text!" Display="Dynamic">
        </asp:RequiredFieldValidator>
        <asp:Button runat="server" ID="Button1" Text="Postback" CausesValidation="true" />
    </div>
    

    请注意RequiredFieldValidator,这是为了确保文本框中有输入的文本。出于某种原因,当 args.Value.length == 0 时,CustomValidator 没有捕获;

    【讨论】:

    • 顺便说一句,您可以使用将 ValidateExpression 设置为 "\w{1,200}" 的 RegularExpressionValidator 而不是 customvalidator,其中 \w 表示单词字符,{1,200} 表示长度为 1 到 200 个符号.
    • CustomValidator 不适用于空值。重要信息,并且我承认在文档中也有说明 - 你成就了我的一天!
    【解决方案3】:

    您必须将以下代码添加到您的提交按钮:

    if (!Page.IsValid)
       return;
    

    自定义验证默认是服务器验证控件,如果页面验证器无效,您必须停止处理。

    【讨论】:

      【解决方案4】:

      首先,你怎么知道验证器没有触发。您是否调试过应用并检查是否正在调用 cvPersonality_ServerValidate() 方法?

      其次,您没有客户端验证器,因此它只会在有回发时触发。

      第三,查看标记,您似乎只设置了 ErrorMessage 属性。仅当页面上有 ValidationSummary 控件时才会显示。您还应该设置 text 属性或在验证器的标记标签内显示一些内容,通常是如下所示的星号:

      <asp:CustomValidator ID="cvPersonality" runat="server" 
          ControlToValidate="txtPersonality"
          Display="Dynamic" ErrorMessage="*Maximum Characters 200" 
          OnServerValidate="cvPersonality_ServerValidate">*</asp:CustomValidator>
      

      【讨论】:

      • 我对这一切都很陌生,如果有更好的方法,我愿意接受建议。
      • 如上图加了星号,点击提交按钮后文字超过200个字符的时候看到了吗?
      猜你喜欢
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多