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

时间:2009-06-14 01:56:48

标签: asp.net vb.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

由于

4 个答案:

答案 0 :(得分:28)

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

ValidateEmptyText="True"

答案 1 :(得分: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>

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

答案 2 :(得分:4)

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

if (!Page.IsValid)
   return;

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

答案 3 :(得分:3)

首先,您如何知道验证器未触发。您是否调试了应用程序并检查了是否正在调用cvPersonality_ServerValidate()方法?

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

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

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