第四章
验证控件
课程目标
q 数据验证的方法
q 验证控件的分类
q RequiredFieldValidator控件
q CompareValidator控件
q RangeValidator控件
q RegularExpressionValidator控件
q CustomValidator控件
q ValidationSummary控件
q 分组校验技术
体验项目——<用户注册信息的验证 >
本程序实现用户的注册,涉及到注册用户的方方面面的信息,为了保证录入信息的正确性,通过验证控件,对部分输入信息进行了验证。
认识验证控件
q为了保证应用程序运行的安全性和数据的有效性,要经常检查用户输入的信息是否有效。
qASP.NET提供了一组验证控件,用于提供一种易用但功能强大的检错方式,并在必要时向用户显示错误信息。
验证窗体输入控件
q验证控件可用于HTML和Web服务器控件的有限子集。
q对于每个控件,特定属性包含了要验证的值。下表列出了可以提供验证功能的输入控件。
验证控件的类型
ASP.NET共有六种验证控件 :
各验证控件的使用方法
q各个控件虽然作用不同,但使用的方法却有很多共同点,因为它们都继承于共同的基类BaseValidator。比如每个控件都有一个ControlToValidate属性,必须用它来指定被验证的控件。下面分别介绍各验证控件的使用方法。
RequiredFieldValidator控件5-1
q RequiredFieldValidator控件用于对一些必须输入的信息进行检验,如果一些必须输入的数据没有输入时,将提示错误。
q 使用这个控件的方法比较简单,将控件拖入窗体以后,关键是给它设置以下4个属性:
(1) ControlToValidate:设置被验证的控件,可以在本属性的下拉列表中选择。
(2) ErrorMessage:当不能通过验证时显示的错误信息。
(3) Display:显示错误信息的位置,包括以下3种选择。
None:不显示错误信息。
Static:显示在设计时控件所放置的位置。
Dynamic:将错误信息动态显示在页面上。
(4) EnableClientScript:本属性为逻辑变量,默认为true,表示如有可能(例如浏览器版本为Internet Explorer 4.0以上),先在客户端验证。若将本属性值改为false,将不在客户端进行验证。
RequiredFieldValidator控件5-2
RequiredFieldValidator控件使用标准代码:
<ASP:RequiredFieldValidator id="Validator_Name" Runat="server”
ControlToValidate="要检查的控件名"
ErrorMessage="出错信息"
Display="Static|Dymatic|None">
占位符
</ASP: RequiredFieldValidator >
RequiredFieldValidator控件 5-3
此控件用于检查任何窗体控件中是否包含值
如果控件中不含任何值,则会生成错误消息
RequiredFieldValidator控件 5-4
RequiredFieldValidator控件 5-5
CompareValidator 控件 4-1
q CompareValidator 控件用来将输入到控件(例如TextBox控件)的值与输入到其他控件的值或常数值进行比较。几个重要的属性的设置方法如下。
(1)通过设置ControlToValidate 属性指定被验证的输入控件。
(2)如果要将输入控件与其他输入控件进行比较,将 ControlToCompare 属性设置为要与之相比较的控件。如果要将输入控件的值与某个常数值进行比较时,应将ValueToCompare 属性设置为与之比较的常数。
(3)类型(Type)属性用于设置比较数据的类型。只有在同一类型的数据之间才能够进行比较。
(4)操作符(Operator)属性用来指定比较的方法,如大于、等于等。如果将Operator属性设置为DataTypeCheck,则CompareValidator控件将忽略 ControlToCompare 和ValueToCompare属性,并且仅仅指示输入到输入控件中的值是否可以转换为类型(Type)属性指定的数据类型。
CompareValidator 控件 4-2
CompareValidator 控件 4-3
CompareValidator 控件 4-4
RangeValidator控件 2-1
RangeValidator控件 2-1
正则表达式 2-1
q 正则表达式用于进行类型匹配
q 正则表达式可使用文字文本逐字匹配
q 它还可以使用元字符与复杂的字符序列相匹配
q 以下为几种常用的符号(更多的参见书本拓展部分)
正则表达式 2-2
RegularExpressionValidator 控件
q 控件RegularExpressionValidator控件用来验证输入的格式是否匹配某种特定的模式(正则表达式)。这类验证允许检查一些可以预知的字符序列,比如身份证号码、电子邮件地址、电话号码和邮编中的字符序列等。
q 除非浏览器不支持客户端验证,或者已明确禁止客户端验证(通过将 EnableClientScript 属性设置为 false),否则将同时执行服务器端和客户端验证。
q 客户端的正则表达式验证实现和服务器端的略有不同。在客户端,使用的是JScript 正则表达式语法。而在服务器端,使用的则是System.Text.RegularExpressions.Regex语法。由于 JScript 正则表达式语法是System.Text.RegularExpressions.Regex 语法的子集,所以最好使用 JScript 正则表达式语法,以便在客户端和服务器端得到同样的结果。
q 使用本控件进行校验时,除按照前面几个控件设置属性以外,最主要的区别是将控件的ValidationExpress属性设置检查模式。方法是单击属性右边的省略号按钮,在弹出的对话框中选择【标准表达式】,弹出的对话框如图所示。
q 然后选择需要检查的模式即可。
RegularExpressionValidator 控件示例
下例判断使用的邮件地址是否正确:
<asp:TextBox ID="txtMail" runat="server">
</asp:TextBox>
<asp:RegularExpressionValidator
ID="RegularExpressionValidator1" runat="server"
ControlToValidate="txtMail"
ErrorMessage="输入邮件格式不正确!"
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" >
</asp:RegularExpressionValidator>
<br />
<asp:Button ID="Button3" runat="server" Text="Button" />
ValidationSummary控件
q ValidationSummary控件用于在一个位置上集中显示来自 Web 网页上所有验证程序的错误信息。根据DisplayMode属性的设置,可以采用列表、项目符号列表或单个段落的形式来显示。通过设置控件的ShowSummary 和 ShowMessageBox 属性,可以确定显示的形式。
ValidationSummary 控件 2-1
显示窗体中生成的所有错误的摘要
摘要可以按多种模式显示:列表、项目列表或单独一段
ValidationSummary 控件 2-2
自定义验证控件
q 使用自定义控件(CustomValidator)时,可以自行定义验证算法,并同时利用控件提供的其他功能。
q 为了在服务器端验证函数,先将CustomValidator控件拖入窗体,并将ControlToValidate属性指向被验证的对象,然后给该验证控件的 ServerValidate 事件提供一个验证程序,最后在ErrorMessage属性中填写出现错误时显示的信息。
q 在ServerValidate 事件处理程序中,可以从ServerValidateEventArgs 参数的 Value 属性中获取输入到被验证控件中的字符串。验证的结果要存储到 ServerValidateEventArgs 的属性 IsValid (true或者false)中。
q 例如,我们利用自定义CustomValidator控件验证某个输入框输入的数据能否被3整除。若不能被3整除时发出错误信息。事件处理的代码如下:
private void CustomValidator1_ServerValidate(object source,
System.Web.UI.WebControls.ServerValidateEventArgs args)
{
int number=int.Parse(args.Value); // 取出输入的数据
if((number % 3) == 0) // 校验能否被3整除
args.IsValid=true; // 结果正确
else
args.IsValid=false; // 结果错误
}
q 如果需要同时提供客户端验证程序以便让具有DHTML能力的浏览器先进行验证时,应该在.aspx的HTML视图中用JavaScript语言编写验证程序,同时将验证的函数名写入控件的ClientValidationFunction属性中。
分组校验技术3-1
q 在一个网页中通常会出现几个独立的输入部分,它们的作用不同,验证的时机也不相同,应该分别进行验证。例如,网页中既包括用于查询记录的输入部分,又包括用户认证部分,就属于这种情况。在HTML网页中可以设置多个表单,将这些输入控件分别放在不同的表单中,以便单独进行校验和提交数据。但是在ASPX网页中,每个网页就是一个运行在服务器的表单。表单的定义如下:
<form id = form1 runat = "server">
…
</form>
q 分组校验是ASP.NET 2.0版本才提出来的新技术,用来解决在ASPX网页中多组不同输入的校验问题。它要求利用各个控件的ValidationGroup属性给这些控件进行分组。
现在用一个简单的示例来说明分组校验的方法。假定有两组输入控件,各包括一个输入框(TextBox)和一个按钮(Button),并且分别放入了校验控件。为了进行分组,将其中一组的输入框、按钮和校验控件的ValidationGroup属性设置为Group1,而将另一组控件的ValidationGroup属性设为Group2。控件的布局如图9.3所示。
分组校验技术 3-2
对应的代码如下:
<form id="form1" runat="server">
<div>
<table border="1" style="width: 680px; height: 88px">
<tr>
<td colspan="3">
第一组校验控件:</td>
</tr>
<tr>
<td style="width: 62px">
<asp:TextBox ID="TextBox1" runat="server"
ValidationGroup="Group1">
</asp:TextBox> </td>
<td style="width: 100px">
<asp:Button ID="Button1" runat="server" Text="Button1"
ValidationGroup="Group1" /> </td>
<td style="width: 100px">
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
runat="server" ErrorMessage="RequiredFieldValidator"
ValidationGroup="Group1">
</asp:RequiredFieldValidator> </td>
</tr>
<tr> <td colspan="3"> 第二组校验控件:</td> </tr>
分组校验技术 3-3
<tr> <td style="width: 62px">
<asp:TextBox ID="TextBox2" runat="server"
ValidationGroup="Group2">
</asp:TextBox>
</td>
<td style="width: 100px">
<asp:Button ID="Button2" runat="server" Text="Button2"
ValidationGroup="Group2" />
</td>
<td style="width: 100px">
<asp:RequiredFieldValidator ID="RequiredFieldValidator2"
runat="server"
ErrorMessage="RequiredFieldValidator"
ValidationGroup="Group2">
</asp:RequiredFieldValidator>
</td>
</tr>
</table>
</div>
</form>
为了简化分组方法,可以一手按住Shift键,另一手用鼠标单击组内各个控件,然后一起设置它们的ValidationGroup属性。
验证控件说明
q 在网站中,对输入数据进行校验是经常需要使用的技术。在ASP.NET中,校验工作都是在服务器端进行。在可能的情况下,将自动调用客户端校验作为一种补充,以减少错误信息在网络上的往返次数,提高处理的效率。
q 各种校验控件虽然作用不同,但是使用的方法却有很多共同点,都需要将属性指向被校验的控件,指定错误发生时提示的语句,其他属性的设置则根据控件的作用不同而有所不同。在这些控件中除RequiredFieldValidator以外,其他控件都认为空的输入是允许的。因此有时需要将RequiredFieldValidator控件与其他控件一起指向输入控件时,才能避免输入错误的发生。
q 由于每个ASPX网页中只有一个表单。而同一个网页中却可能存在着多组独立的验证控件,此时可以利用ASP.NET 2.0提供的分组校验技术将这些校验控件进行分组,以便让它们在不同的时机完成自己独立的校验工作。
本章总结
q 数据验证的方法
q 验证控件的分类
q RequiredFieldValidator控件
q CompareValidator控件
q RangeValidator控件
q RegularExpressionValidator控件
q CustomValidator控件
q ValidationSummary控件
q 分组校验技术