自定义验证程序验证未针对文本框触发

xtr*_*its 1 vb.net asp.net

我已经为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
Run Code Online (Sandbox Code Playgroud)

谢谢

Rem*_*tec 28

请记住在CustomValidator上设置此属性...

ValidateEmptyText="True"
Run Code Online (Sandbox Code Playgroud)


Gen*_*eev 6

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

 <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>
Run Code Online (Sandbox Code Playgroud)

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