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 ,如需转载请自行联系原作者


相关文章
|
关系型数据库 MySQL C#
C# winform 一个窗体需要调用自定义用户控件的控件名称
给用户控件ucQRCode增加属性: //二维码图片 private PictureBox _pictureBoxFSHLQrCode; public PictureBox PictureBoxFSHLQrCode {   get { return _pictureBoxFSHLQrCode; }   set { this.pictureBoxFSHLQrCode = value; } } 在Form1窗体直接调用即可: ucQRCode uQRCode=new ucQRCode(); ucQRCode.PictureBoxFSHLQrCode.属性= 要复制或传给用户控件上的控件的值
72 0
|
5月前
|
Python
PyQt5常见布局、控件用法有哪些?
这是关于Python GUI编程中使用的布局和控件的简要介绍: - **布局**: - `QHBoxLayout`:用于水平排列控件。 - `QVBoxLayout`:用于垂直排列控件。 - `QGridLayout`:在网格中排列控件,支持多行多列。 - `QFormLayout`:创建表单样式的布局,方便组织输入字段。
|
6月前
|
iOS开发 UED 开发者
UIControl 功能和用法
UIControl 功能和用法
|
7月前
|
数据安全/隐私保护 容器
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
94 0
[Qt5&控件] 控件stackedWidget、lineEdit等的用法
WPF属性---重复样式和触发器
WPF属性---重复样式和触发器
125 0
|
Python Windows 容器
Python Tkinter教程(二)——Label控件、Frame控件、Button控件的完整参数和所有方法及详细用法
Python Tkinter教程(二)——Label控件、Frame控件、Button控件的完整参数和所有方法及详细用法
221 0
|
C++
Qt动态添加控件并设置大小位置等属性
Qt动态添加控件并设置大小位置等属性
1028 0
|
C#
WPF整理-为控件添加自定义附加属性
原文:WPF整理-为控件添加自定义附加属性 附加属性,大家都不陌生,最常见的是Canvas.Left/Canvas.Top,类似的也有Grid.Row/Grid.Column等附加属性。举个最常见的例子 需要说明的是并不是所有的附加属性都是元素放进去后才会有附加效果,上面的例子只是刚好是这种错觉的巧合情况,Grid.Row也属于这种巧合。
2127 0
WPF整理-为控件添加自定义附加属性
gtk窗口和标签控件范例代码
gtk窗口和标签控件范例代码
109 0
|
C#
WPF查找子控件和父控件方法
原文:WPF查找子控件和父控件方法 public List GetChildObjects(DependencyObject obj, string name) where T : FrameworkElement { Dependen...
1413 0