我为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
由于
答案 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>