CustomValidator控件用法

本文详细介绍了ASP.NET中CustomValidator控件的使用方法,包括服务器端验证和客户端验证的实现方式,并通过具体示例展示了如何对TextBox和CheckBoxList进行有效性验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然大部分时间一直从事asp.net的开发,对于一些常用的asp.net服务器端验证控件及它们的组合使用比较熟悉,如:
CompareValidator ——比较验证控件
RangeValidator ——范围验证控件
RegularExpressionValidator ——正则验证控件
RequiredFieldValidator ——必填验证控件
但是一直没去研究CustomValidator控件的用法,心中自然也有一种想法:好不容易从写js验证的痛苦中摆脱出来,如今是能不回去就不要回去了,但是有时候又会遇到一些用上面提到的验证控件没有办法做到的情况(当然是指在客户端没办法做到,我要是说在服务器端没办法做到就让大家笑掉大牙了),用自然想它在客户端完成验证了,至少也要先在客户端验证一下,通过客户端验证再到服务器端验证,这样减少数据的往返时间,降低网络流量和保证反应及时性。

CustomValidator 是一个提供灵活验证方式的控件,它也能在客户端和服务器端验证,分别提供了两种验证的方法原型:
服务器端验证:

voidServerValidation(objectsource,ServerValidateEventArgsargs)
客户端验证(js):
functionValidationFunctionName(source,arguments)

无论对于客户端验证还是服务器端验证,设置通过验证的办法就是将第二个参数的IsValid属性设置为true即可,反之设置为false。

下面我以两个例子来讲述如何使用CustomValidator 来进行验证,第一个用法是用来验证TextBox,第二个用法是验证CheckBoxList,确保其中只能选中一项,而且必须选中一项,对于TextBox这类的控件,我这里设置了对应的CustomValidator 的ValidateEmptyText="True"属性,这样即使控件值为空也能得到验证。

全部代码如下(这里是cs代码和html代码混合的模式):

<%@PageLanguage="C#"ContentType="text/html"ResponseEncoding="gb2312"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>
<metaname="keywords"content="CustomValidator控件用法"/>
<metaname="description"content="周公讲述CustomValidator控件用法"/>
<title>CustomValidator控件用法</title>
</head>
<scriptlanguage="javascript"type="text/javascript">
functionClientValidateUserName(source,args)
{
//alert(source);source=CustomValidator1,为验证控件
//alert(args);
varobj=document.getElementById("txtUserName");
if((obj.value=="")||(obj.value.length>10))
{
args.IsValid
=false;
}
else
{
args.IsValid
=true;
}
}

functionCheckCheckBoxList(source,args)
{
varobj=document.getElementById('<%=this.cbAgeRangeList.ID%>');//返回具有和属性id的值相同或相似的对象集合
vark,right=false;
varlength=(obj.all.tags('input').length);//返回obj对象里具有“input”标签对象的集合
for(k=0;k<length;k++)
{
//alert("name:"+obj.all.tags('input')[k].name+"是否:"+obj.all.tags('input')[k].checked);
if(obj.all.tags('input')[k].checked)//obj对象里具有input标签对象键值为k的属性为checked的值
{
right
=!right;
}

}
if(right)
{
args.IsValid
=true;
}
else
{
args.IsValid
=false;
}
}
</script>
<scriptrunat="server">
protected
voidPage_Load(ObjectSrc,EventArgsE)
{
if(!IsPostBack)DataBind();
}

public
voidServerValidateUserName(objectsource,ServerValidateEventArgsargs)
{
if((string.IsNullOrEmpty(txtUserName.Text))||(txtUserName.Text.Length>10))
{
args.IsValid
=false;
}
else
{
args.IsValid
=true;
}
}
</script>
<body>
<formrunat="server">
UserName:
<asp:TextBoxID="txtUserName"runat="server"/>
<asp:CustomValidatorID="CustomValidator1"runat="server"ErrorMessage="错误信息"ControlToValidate="txtUserName"ClientValidationFunction="ClientValidateUserName"ValidateEmptyText="True"></asp:CustomValidator>
<asp:ButtonID="btnValid1"runat="server"Text="验证用户名"/>
<asp:CheckBoxListID="cbAgeRangeList"runat="server"Height="36px"Width="400px"RepeatDirection="Vertical">
<asp:ListItemValue="1">&lt;16</asp:ListItem>
<asp:ListItemValue="2">16-22</asp:ListItem>
<asp:ListItemValue="3">22-30</asp:ListItem>
<asp:ListItemValue="4">30-40</asp:ListItem>
<asp:ListItemValue="5">40-50</asp:ListItem>
<asp:ListItemValue="6">50-60</asp:ListItem>
<asp:ListItemValue="6">60-80</asp:ListItem>
<asp:ListItemValue="6">&gt;80</asp:ListItem>
</asp:CheckBoxList>
<asp:customvalidatorid="CustomValidator2"runat="server"
ErrorMessage
="请正确选择年龄段"ClientValidationFunction="CheckCheckBoxList"></asp:customvalidator>
</form>
</body>
</html>
运行结果:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值