目录
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方法。
代码如下 | 复制代码 |
<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控件下面写入如下代码:
代码如下 | 复制代码 |
if(!IsValid){ return; } if(this.IsValid) } } |
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属性则是校验不合法后显示的错误提示信息。
代码如下 | 复制代码 |
<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属性用来设置进行比较的两个控件。
代码如下 | 复制代码 |
<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用来设定范围的最大和最小值。
代码如下 | 复制代码 |
<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属性则编写需要验证的表达式的样式,下面的例子就是一段校验邮编的代码。
代码如下 | 复制代码 |
<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控件用于执行用户自定义的验证,这种校验既可以是服务器端的也可以是客户端的,下面的代码就是使用客户端验证邮编的例子。
代码如下 | 复制代码 |
<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属性设置。
代码如下 | 复制代码 |
<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> |