CustomValidator控件用法

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

服务器端验证:
void  ServerValidation ( object  source, ServerValidateEventArgs args)
客户端验证(js):
function  ValidationFunctionName(source, arguments)
无论对于客户端验证还是服务器端验证,设置通过验证的办法就是将第二个参数的IsValid属性设置为true即可,反之设置为false。
下面我以两个例子来讲述如何使用CustomValidator 来进行验证,第一个用法是用来验证TextBox,第二个用法是验证CheckBoxList,确保其中只能选中一项,而且必须选中一项,对于TextBox这类的控件,我这里设置了对应的CustomValidator 的ValidateEmptyText="True"属性,这样即使控件值为空也能得到验证。
全部代码如下(这里是cs代码和html代码混合的模式):
<% @ Page Language = " C# "  ContentType = " text/html "  ResponseEncoding = " gb2312 "   %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=gb2312"   />
< meta  name ="keywords"  content ="CustomValidator控件用法"   />
< meta  name ="description"  content ="周公讲述CustomValidator控件用法"   />
< title > CustomValidator控件用法 </ title >
</ head >
< script  language ="javascript"  type ="text/javascript" >
    
function  ClientValidateUserName(source,args)
    {
        
// alert(source);source=CustomValidator1,为验证控件
         // alert(args);
         var  obj = document.getElementById( " txtUserName " );
        
if ((obj.value == "" ) || (obj.value.length > 10 ))
        {
            args.IsValid
= false ;
        }
        
else
        {
            args.IsValid
= true ;
        }
    }
    
    
function  CheckCheckBoxList(source,args)
    {
        
var  obj = document.getElementById( ' <%=this.cbAgeRangeList.ID%> ' ); // 返回具有和属性id的值相同或相似的对象集合
         var  k,right = false ;
        
var  length = (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 >
< script  runat ="server" >
protected 
void  Page_Load(Object Src, EventArgs E)
{
  
if  ( ! IsPostBack) DataBind();
}

public 
void  ServerValidateUserName(object source, ServerValidateEventArgs args)
{
    
if ((string.IsNullOrEmpty(txtUserName.Text)) || (txtUserName.Text.Length > 10 ))
    {
        args.IsValid
= false ;
    }
    
else
    {
        args.IsValid
= true ;
    }
}
</ script >
< body >
< form  runat ="server" >
  UserName:
< asp:TextBox  ID ="txtUserName"  runat ="server"   />
  
< asp:CustomValidator  ID ="CustomValidator1"  runat ="server"  ErrorMessage ="错误信息"  ControlToValidate ="txtUserName"  ClientValidationFunction ="ClientValidateUserName"  ValidateEmptyText ="True" ></ asp:CustomValidator >
  
< asp:Button  ID ="btnValid1"  runat ="server"  Text ="验证用户名"   />
  
< asp:CheckBoxList  ID ="cbAgeRangeList"  runat ="server"  Height ="36px"  Width ="400px"  RepeatDirection ="Vertical" >
    
< asp:ListItem  Value ="1" > &lt; 16 </ asp:ListItem >
    
< asp:ListItem  Value ="2" > 16-22 </ asp:ListItem >
    
< asp:ListItem  Value ="3" > 22-30 </ asp:ListItem >
    
< asp:ListItem  Value ="4" > 30-40 </ asp:ListItem >
    
< asp:ListItem  Value ="5" > 40-50 </ asp:ListItem >
    
< asp:ListItem  Value ="6" > 50-60 </ asp:ListItem >
    
< asp:ListItem  Value ="6" > 60-80 </ asp:ListItem >
    
< asp:ListItem  Value ="6" > &gt; 80 </ asp:ListItem >
  
</ asp:CheckBoxList >
  
< asp:customvalidator  id ="CustomValidator2"  runat ="server"  
ErrorMessage
="请正确选择年龄段"  ClientValidationFunction ="CheckCheckBoxList" ></ asp:customvalidator >
</ form >
</ body >
</ html >
运行结果:

















本文转自周金桥51CTO博客,原文链接:http://blog.51cto.com/zhoufoxcn/167014 ,如需转载请自行联系原作者


相关文章
|
8月前
|
图形学
|
3天前
LabVIEW创建自定义输入控件、显示控件和自定义类型2
LabVIEW创建自定义输入控件、显示控件和自定义类型2
|
5月前
|
数据安全/隐私保护 容器
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
44 0
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
|
10月前
|
C# 容器
WPF框架下,窗体的嵌套显示
WPF框架下,窗体的嵌套显示
177 0
|
11月前
|
Python Windows 容器
Python Tkinter教程(二)——Label控件、Frame控件、Button控件的完整参数和所有方法及详细用法
Python Tkinter教程(二)——Label控件、Frame控件、Button控件的完整参数和所有方法及详细用法
138 0
gtk窗口和标签控件范例代码
gtk窗口和标签控件范例代码
89 0