教程集 www.jiaochengji.com
教程集 >  脚本编程  >  Asp.net  >  正文 ASP.NET 高级编程基础之验证控件介绍

ASP.NET 高级编程基础之验证控件介绍

发布时间:2016-12-03   编辑:jiaochengji.com
教程集为您提供ASP.NET 高级编程基础之验证控件介绍 等资源,欢迎您收藏本站,我们将为您提供最新的ASP.NET 高级编程基础之验证控件介绍 资源
ASP.NET功能强大的一种体现就是具有丰富的Web控件,这里我们谈谈其中的一种—验证控件。它总结了各种Web数据校验方式,设计成了今天这种通用的ASP.NET控件形式。

目录
1. 验证控件简介
2. 验证控件的使用方法
3. 小结

--------------------------------------------------------------------------------

1. 验证控件简介
顾名思义,验证控件就是校验用户输入数据正确性的控件,如用户在文本框中输入数据后,便显示一条提示信息,表明了校验的数据是不合法的。验证过程既可以在服务器上执行,也可以在客户机上执行,在客户端运行的校验代码是数据提交之前被执行的,因此可以提高程序的性能。ASP.NET的验证控件可以进行多种校验,如数据范围检查、数据间的比较和自定义校验等等,下面的内容将会逐一介绍这些验证控件。


三种控件的区别
(1) HTML控件,ASP.NET把HTML控件当成普通字符串渲染到浏览器端,不去检查正确性,无法再服务器端进行处理。

(2) ASP.NET服务端控件,经过ASP.NET高度封装的控件,使用简单,运行在服务器端,可以再服务端使用C#代码进行操作,会渲染到客户端为HTML控件。

(3) runat=”server”的HTML控件,在HTML控件的基础上面添加runat=”server”,也是运行在服务端的,也可以服务端使用C#进行操作,也会渲染到客户端,不像ASP.NET服务端控件那样高度封装,暴露的属性大部分是普通的HTML属性,和ASP.NET服务端控件相比的好处是:当需要在服务端要对控件进行操作的时候,如果控件没有被ASP.NET服务端控件封装的时候,用runat=”server”的HTML控件更方便,runat=”server”的HTML控件也会对虚拟路径,id->ClientID进行处理,所以在使用虚拟路径,UserControl中也可能会用到。

<input type=”Text” id=”txt1”runat=”server” />

(4) a->HtmlAnchor;form->HtmlForm;head->HtmlHead;input->HtmlInputButton,HtmlInputCheckBox,HtmlInputText等;meta->HtmlMeta;table->HtmlTable;tr->HtmlTableRow;td->HtmlTableCell;title->HtmlTitl。为单独封装的标签(比如:div)对应的类型为:HtmlGenericControl。使用Attributes属性操作未封装的属性。

(5) 服务端HTML控件不像ASP.NET控件那样封装的高级,比如:ASP.NET控件的BgColor属性为Color类型,而HTML控件的BgColor属性则为字符串类型,需要开发人员设置合适的值。

注:在ascx写入如下代码,拖放一个TextBox控件和Button控件,如果要操作当鼠标滑过Button控件的时候给TextBox赋值,直接在Button控件里面写onmouserover这样是会报错的,所以我们要单独写一个JavaScript方法。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy4423')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy4423>

<script type="text/javascript">

    document.getElementById("<%=Button1.ClientID %>").onmouserover = function () {

        document.getElementById("<%=TextBox1.ClientID %>").value = "Kencery";

    }

</script>

验证控件
(1) 必须要对用户输入的数据进行合法性校验,这些校验逻辑很多是重复的,比如:字段不能为空,必须为日期格式,数字不能大于100等,而且要同时在客户端和服务端校验,客户端校验提高可用性,服务端校验防止恶意攻击,ASP.NET验证控件就是为了简化这些问题而提供的。

(2) ASP.NET提供了如下的组件

 1) RequiredFieldValidator:字段必填。

 2) RangeValiclator:值在给定的最大值最小值之间。

 3) CompareValidator:用于比较两个值的关系是否满足要求或者是否是指定类型的数据。

 4) RegularExpressionValidator:校验数据满足正则表达式。

 5) CustomValidator:自定义验证。

(3) RequiredFieldValidator

 1) ControlToValidate设定要验证的控件,Text属性为当被验证的控件为空的时候显示的错误信息,Text不仅可以写文本,还可以写任何HTML内容。

 2) 有时候控件如果是默认值也认为是空值,比如:下拉列表的选中值”---请选择性别---”,文本框的值为”填入搜索关键字”,只有将RequiredFieldValidator的InitialValue属性设定为”---请选择性别---”,”填入搜索关键字”即可。

(4) Validator共性

 1) 页面中的IsValid属性用来判断页面中的所有Validator是否都校验通过,只有都校验通过才会为True,即使页面中的Validator服务端校验报错(禁用JavaScript跳过客户端校验),在服务端方法中的业务代码(比如:btnOK.Click)也会被执行,因此如果代码在数据校验不通过的不能执行,则需要判断IsValid的值。

注:在Button控件下面写入如下代码:

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy3416')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy3416>

 if(!IsValid){

    return;

}

if(this.IsValid)
{    
  正确信息;                         
 else{
 
  错误信息;

} }

 2) 所有验证控件都有Display属性,用来决定如何显示错误信息。三个值:static:没有错误信息的时候控件的Visiblity样式为Hidden来实现隐藏;Dynamic,没有错误信息的时候控件的display样式为none来实现隐藏,这两者的区别在于:Visiblity:hidden隐藏控件仍会占据空间,而display:none隐藏则不会占用控件,Display属性还可以设置为None(用来配合后面讲的ValidationSummary)。

 3) 几乎所有的验证控件都有ControlToValidate,Text属性,所有控件都几乎在客户端和服务端都要进行校验。

 4) 如果在一个页面中同时放置注册和登录表单,那么他们的验证就会同时进行,这样虽然只是登录,但是注册的验证也会触发,可以使用验证组来解决这个问题,将同一组的控件(表单,提交按钮)等的ValidationGroup设为相同的值就可以,这样的话和Button等触发事件的控件ValidationGroup相同的控件才会校验。

 5) 如果将按钮控件(Button,ImageButton,LinkButton)的CausesValidator属性设置为false,则这个按钮的点击不触发校验。

(5) RangeValidator

 1) RangeValidator:MininmumValue,MaximumValue为最小,最大值,Type属性为数据类型(String,Interger,Double,Date,Currency等)。例如:年龄,毕业日期在合理范围内。

 2) RangeValidator,CompareValidator,RegularExpressValidator等都不会对非空值进行检验,所以如果字段不允许为空则需要在使用RequiredFieldValidator。

(6) CompareValidator

1) CompareValidator:Type属性同RangeValidator,Operator属性,比较操作符,可选值DataTypeCheck,Equal,GreaterThan,GreaterThanEqual,LessThan,LessThanEqual,NotEqual,ValueToCompare所比较的运算符右边的值,ControlToCompare设定和另一个控件进行比较。

 2) 校验数据类型,不进行范围的比较,ControlToValidate设定要校验的控件,Type设定要校验的数据类型,Operator设定为DataTypeCheck。

 3) 要进行范围的比较,ControlToValidator设定要校验的控件,Type设置要校验的数据类型,Operator设定为GreaterThan,ValueToCompare为要比较的值,也可以编程的时候动态设置。

 4) 与另一个空间的值进行比较,ControlToValidate设定要校验的控件,Type设置要检验的数据类型,Operator设定为GreaterThan,ControlToCompare设置为要比较的验证控件(运算符右边的控件)。

(7) 高级Validator

1) RegularExpressionValidator,ValidationExpression属性为正则表达式,VS的可视化编辑提供了几个内置的正则表达式,也可以自己写,案例:检验Email地址,身份证号码,QQ号码(5位至10位的数字),个人说明必须在10到50字之间。

 2) CustomValidator,自定义验证控件,当ASP.NET内置的验证控件无法满足要求的时候可以使用CustomValidator。

 3) ServerValidate事件为服务端的校验代码,在事件处理函数中读取args.Value来获得待校验的值,如果值合法则将args.IsValid设置为True,否则设置为False,如果为ClientValidationFunction设定一个函数名,那么会首先在客户端调用指定的JavaScript函数进行客户端校验,否则将只做服务器端校验,客户端校验函数的签名是:”函数名(src,args)”,argsd的属性以及意义和服务端的一样。

(8) 汇总错误消息

1) 使用Validator错误消息会显示在放置的位置,这样有两个可能的问题,如果表单非常大,用户看不到全部的错误信息,希望把消息集中显示在提交按钮旁边,如果错误信息非常多,错误信息会散落各地,希望能集中显示。

 2) ValidationSummary控件用来集中显示错误信息,每个验证控件都有ErrorMessage,Text两个属性,ErrorMessage是用来显示到ValidationSummary中的值,Text是用来显示在Validator位置的值,如果Text为空,则ErrorMessage会同时显示到ValidationSummary和控件的位置,一般Text的值要简短(比如:”必填”,”*”),因为直接显示到空间的位置,能知道指的是哪个控件,ErrorMessage要详细一点(比如:”用户名不能为空”,不能是”不能为空”等),这样才能从ValidationSummary每条错误信息中读取值出来。

 3) ValidationSummary的属性:DisPlayMode:显示模式,ShowMessageBox用户同时显示警告对话框。


 验证控件的使用方法
① RequiredFieldValidator控件
当页面上的控件要求必须输入数据时,RequiredFieldValidator就起作用了,ControlToValidate属性选择需要验证的控件,而ErrorMessage属性则是校验不合法后显示的错误提示信息。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy2299')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy2299><HTML>
  <HEAD>
    <title>RequiredFieldValidator Example</title>
  </HEAD>
<BODY>
  <form id="Form1" runat="server">
    Name:
    <asp:TextBox id="TextBox1" runat="server" ></asp:TextBox>
    <asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server"
ErrorMessage="Please enter your name" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
    <asp:Button id="Button1"  runat="server" Text="Button"></asp:Button>
  </form>
</BODY>
</HTML>

②CompareValidator控件
CompareValidator控件是用来比较两个输入控件之间的数据一致性的,同时也可以用来校验控件中内容的数据类型:如整形、字符串型等。ControlToCompare和ControlToValidate属性用来设置进行比较的两个控件。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy8884')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy8884><HTML>
  <HEAD>
    <title>CompareValidator Example</title>
  </HEAD>
<BODY>
  <form id="Form1" runat="server">
    <P>Password:
    <asp:TextBox id="txtPwd" runat="server" TextMode="Password"></asp:TextBox><BR>
    Confirm:
    <asp:TextBox id="TxtCfm" runat="server" TextMode="Password"></asp:TextBox></P>
    <P>
    <asp:Button id="Button2" runat="server" Text="Button"></asp:Button>
    <asp:CompareValidator id="CompareValidator1" runat="server" ErrorMessage="Password Error!"
     ControlToValidate="TxtCfm" ControlToCompare="txtPwd"></asp:CompareValidator></P>
  </form>
</BODY>
</HTML>

③RangeValidator控件
RangeValidator控件可以用来判断用户输入的值是否在某一特定范围内,属性MaximumValue和MinimumValue用来设定范围的最大和最小值。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy1630')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy1630><HTML>
  <HEAD>
    <title>RangeValidator Example</title>
  </HEAD>
<BODY>
  <form id="Form1" runat="server">
  <P>Age:
  <asp:TextBox id="TxtAge" runat="server"></asp:TextBox>
  <asp:RangeValidator id="RangeValidator1" runat="server" ControlToValidate="TxtAge"
   ErrorMessage="Age Error!" MaximumValue="99" MinimumValue="1"></asp:RangeValidator></P>
  </form>
</BODY>
</HTML>

④RegularExpressionValidator控件
RegularExpressionValidator控件可以判断用户输入的表达式是否正确,如电话号码、邮编、URL等,ControlToValidate属性选择需要验证的控件,ValidationExpression属性则编写需要验证的表达式的样式,下面的例子就是一段校验邮编的代码。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy8309')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy8309><HTML>
  <HEAD>
    <title>RegularExpressionValidator Example</title>
  </HEAD>
<BODY>
  <form id="Form1" runat="server">
  <P>Postal Code:
  <asp:TextBox id="TxtPostalCode" runat="server"></asp:TextBox>
  <asp:RegularExpressionValidator id="RegularExpressionValidator1" runat="server"
       ControlToValidate="TxtPostalCode" ErrorMessage="Postal Code Error!"   
       ValidationExpression="d6}"></asp:RegularExpressionValidator></P>
  </form>
</BODY>
</HTML>

⑤CustomValidator控件
CustomValidator控件用于执行用户自定义的验证,这种校验既可以是服务器端的也可以是客户端的,下面的代码就是使用客户端验证邮编的例子。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy4575')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy4575><HTML>
  <HEAD>
    <title>CustomValidator Example</title>
  </HEAD>
<BODY>
  <form id="Form1" runat="server">
    <P>Postal Code:
    <asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
    <asp:CustomValidator id="CustomValidator1" runat="server" ControlToValidate="TextBox1" 
         ErrorMessage="CustomValidator"  ClientValidationFunction="ClientValidate">
    </asp:CustomValidator></P>
  </form>
</BODY>
</HTML>
<script language="vbscript">
   Sub ClientValidate(source, arguments)
      If isnumeric(arguments.Value ) and len(arguments.Value)=6 Then
         arguments.IsValid=true
      Else
         arguments.IsValid=false
      End If
   End Sub
</script>

⑥ValidationSummary控件
这个控件会将页面中所有的校验错误输出为一个列表,列表的显示方式由DisplayMode属性设置。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy5466')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy5466><HTML>
  <HEAD>
    <title>ValidationSummary Example</title>
  </HEAD>
<body>
  <form id="Form1" runat="server">
  <P>Age:
  <asp:TextBox id="TxtAge" runat="server"></asp:TextBox>
  <asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server"
 ControlToValidate="TxtAge" ErrorMessage="Age Error!" Display="None"></asp:RequiredFieldValidator><BR>
  Postal Code:
  <asp:TextBox id="TxtPostalCode" runat="server"></asp:TextBox>
  <asp:RequiredFieldValidator id="RequiredFieldValidator2" runat="server"
ControlToValidate="TxtPostalCode" ErrorMessage="Postal Code Error!"
Display="None"></asp:RequiredFieldValidator></P>
  <P>
  <asp:Button id="Button1" runat="server" Text="Button"></asp:Button></P>
  <P>
  <asp:ValidationSummary id="ValidationSummary1" runat="server"
   HeaderText="You must enter a value in the following fields:"></asp:ValidationSummary></P>
  </form>
</body>
</HTML>

您可能感兴趣的文章:
ASP.NET 高级编程基础之验证控件介绍
ASP.NET 2.0服务器控件开发
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
thinkphp中使用AOP切面编程快速验证数据的方法介绍
ASP.NET系统用户权限设计与实现
asp.net中web.config文件详解
用 .NET 开发的轻量级 UI 测试自动化
asp.net验证邮箱格式的两种方法
php验证码大全(实例分享)
php绘图不显示图片怎么办

[关闭]
~ ~