第八讲 ASP.NET验证控件教学目的:
一、验证控件概述二、各验证控件的使用方法三、自定义控件四、分组校验方法教学重点:
一、理解数据验证的意义;
二、掌握验证控件的使用;
三、掌握验证页面设计方法。
一,ASP.NET验证控件概述
验证工作最好放在客户端进行。当在客户端输入完数据,
向服务器提交以前应对数据进行检测,如果发现错误,立即提示并要求改正,改正前不向服务器提交信息。
但是有两个原因使得不能依赖客户端的验证。第一,由于相当一部分客户端的设备功能弱,不具备验证能力,此时验证工作只能放在服务器端进行;第二,恶意的用户能够比较容易地破坏客户端的验证脚本,或者想方设法绕过客户端的校验。
因此,从安全的角度出发,除非人为地取消了服务器端验证,不论客户端是否进行了验证,服务器端的验证都是不可缺少的。当用户向服务器提交数据之后,服务器都毫无例外地调用验证程序来逐个检查用户的输入。 如果发现任何输入数据有错误时,整个页面将自行设置为无效状态,
并发出错误信息。
验证控件是一个控件集合,使用验证控件可以验证输入控件(如 TextBox)或选择控件(如 ListBox)
中数据的空值、范围和格式等,当验证失败时,显示自定义的错误信息。验证控件验证的是 TextBox
控件的 Text属性值和 ListBox,DropDownList、
RadioButtonList控件的 SelectedItem.Value属性值。
当网页有提交发生时,首先启动验证控件的验证功能,各验证控件检验它所要验证的控件内的数据,
只有当页面上所有的验证通过验证后,网页才会被提交至服务器进行处理。
即:验证是在提交服务器之前的
使用验证控件通常不需要编写程序代码,只要简单地设置控件的几个属性就能完成以前需要非常复杂的程序代码才能完成的验证工作。
可以通过设置提交控件( Button、
ImageButton和 LinkButton控件)的
CausesValidation属性 来确定当它被单击时是否激发验证控件的验证行为。当某个提交控件的单击事件处理程序并非为了将数据传送给服务器时(例如“取消”等),将其
CausesValidation属性设置为 false可避免引发验证,便能顺利实现“取消”。
二,ASP.NET验证控件 的类型
系统提供了 5种验证控件 (包括程序设计者自行定义的控件 )和一个汇总控件。各种验证控件的作用如表 9.1所示。
三、各验证控件的使用方法
RequiredFieldValidator控件
CompareValidator控件
RangeValidator控件
RegularExpressionValidator 控件
ValidationSummary控件
8.3.1 RequiredFieldValidator控件
RequiredFieldValidator控件是 一个用于要求用户必须输入数据的验证控件。只要用户在指定的输入控件中输入了数据,不管输入的是什么数据,都可以通过这个验证。 通常作为非空验证控件使用。
常规应用:
登陆模块中用户名、密码不能为空
RequiredFieldValidator控件的重要属性:
(1) ControlToValidate:设置被验证的控件,可以在本属性的下拉列表中选择。
(2) ErrorMessage:当不能通过验证时在
ValidationSummary显示的错误信息。( 一般设为详细的错误信息 )
(3) Text:当不能通过验证时显示的错误信息。如果该值没有设置,则显示 ErrorMessage的值的内容。( 一般设为 *)
注意:若同时设置了 ErrorMessage和 Text属性值,
则验证控件显示 Text属性的内容!
(4) Display:显示错误信息的位置,包括以下 3种选择。
None:不显示错误信息。
Static:显示在设计时控件所放置的位置。
Dynamic:将错误信息动态显示在页面上。
(5) EnableClientScript:本属性为逻辑变量,默认为 true,表示如有可能 (例如浏览器版本为
Internet Explorer 4.0以上 ),先在客户端验证。
若将本属性值改为 false,将不在客户端进行验证。
(6) InitialValue:要验证的字段的初始值。 即如果需要验证的控件的值和 InitialValue的值相同,
则 RequiredFieldValidator将提示出错。
8.3.2 CompareValidator控件使用 CompareValidator控件可以将用户输入到一个输入控件(如 TextBox控件)中的值与输入到另一个输入控件中的值进行比较,或者将该值与某个常数值进行比较,
还可以使用该控件来检查输入到输入控件中的值是否可以转换为 Type属性所指定的数据类型。
常规应用:修改密码时,需要两次输入修改后的密码,而这两次密码要求输入必须相等。
CompareValidator控件的重要属性:
(1) 通过设置 ControlToValidate 属性指定被验证的输入控件。
(2) 如果要将输入控件与其他输入控件进行比较,
将 ControlToCompare 属性设置为要与之相比较的控件。 如果要将输入控件的值与某个常数值进行比较时,应将 ValueToCompare 属性设置为与之比较的常数。
(3) 类型 (Type)属性用于设置比较数据的类型。只有在同一类型的数据之间才能够进行比较。用于比较的值的数据类型,有 String,Integer、
Double,Date和 Currency。
(4) 操作符 (Operator)属性用来指定比较的方法,
如大于、等于等。
(5) ValueToCompare属性:指定进行比较的常量值。
说明
( 1)将 CompareValidator控件的 Operator属性设置为 DataTypeCheck运算符时,将指定输入到所验证的输入控件的值与 Type属性指定的数据类型之间的数据类型进行比较,如果无法将该值转换为指定的数据类型,则验证失败。使用这个运算符时,将忽略 ControlToCompare和
ValueToCompare属性。
( 2)使用 CompareValidator控件,既可以将输入控件的值与另一个输入控件的值进行比较,
也可以将输入控件的值与某个常数值进行比较。
但不要同时设置 ControlToCompare属性和
ValueToCompare属性。如果同时设置了这两个属性,则 ControlToCompare属性优先。
8.3.3 RangeValidator控件
8.3.4 RegularExpressionValidator 控件
控件 RegularExpressionValidator控件用来验证输入的格式是否匹配某种特定的模式 (正则表达式 )。 这类验证允许检查一些可以预知的字符序列,比如身份证号码、电子邮件地址、电话号码和邮编中的字符序列等。
使用本控件进行校验时,除按照前面几个控件设置属性以外,最主要的区别是将控件的 ValidationExpress属性 设置检查模式。方法是单击属性右边的省略号按钮,在弹出的对话框中选择 【 标准表达式 】,弹出的对话框如图 9.2所示。
RegularExpressionValidator控件的主要属性:
( 1) ControlToValidate ( 2) ErrorMessage
( 3) ValidationExpression
构造正则表达式的元字符:
图 9.2 选择正则表达式
8.3.5 ValidationSummary控件
ValidationSummary控件用于在一个位置上集中显示来自 Web 网页上所有验证程序的错误信息。根据
DisplayMode属性的设置,可以采用列表、项目符号列表或单个段落的形式来显示。通过设置控件的
ShowSummary 和 ShowMessageBox 属性,可以确定显示的形式。
ValidationSummary控件的常用属性
( 1) DisplayMode ( 2) EnableClientScript
( 3) HeaderText ( 4) ShowMessageBox
( 5) ShowSummary
ValidationSummary控件通常与其他验证控件一起使用,可以分别设置各个验证控件的
ErrorMessage属性,并将它们的 Display属性设置为 None,而通过 ValidationSummary控件来收集所有验证错误,并在网页区域中或以对话框形式显示错误信息。 ValidationSummary控件中显示的错误信息,是由每个验证控件的
ErrorMessage属性指定的。
8.3.6 CustomValidator控件
CustomValidator控件可以为输入控件提供自定义的验证函数,以检查用户输入是否满足要求。自定义验证函数可以在服务器上或客户端脚本中执行。
对于服务器端自定义验证,要将自定义验证放置在验证程序的 OnServerValidate事件中。
并为执行验证的 ServerValidate事件提供一个处理程序。作为参数传递到该事件处理程序的 ServerValidateEventArgs对象的 Value
属性是要验证的值。 IsValid属性是一个布尔值,用于设置验证的返回结果。
例如,我们利用自定义 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;
// 结果错误
}
然后在 Button的事件代码中写入,
protected void Button1_Click(object
sender,EventArgs e)
{
if (! Page.IsValid)
{
CustomValidator1.Text =
"123455";
}
}
四,分组校验技术
在一个网页中通常会出现几个独立的输入部分,
它们的作用不同,验证的时机也不相同,应该分别进行验证。例如,网页中既包括用于查询记录的输入部分,又包括用户认证部分,就属于这种情况。在 HTML网页中可以设置多个表单,将这些输入控件分别放在不同的表单中,以便单独进行校验和提交数据。但是在 ASPX网页中,每个网页就是一个运行在服务器的表单。 分组校验是
ASP.NET 2.0版本才提出来的新技术,用来解决在 ASPX网页中多组不同输入的校验问题。它要求利用各个控件的 ValidationGroup属性给这些控件进行分组。
现在用一个简单的示例来说明分组校验的方法。假定有两组输入控件,各包括一个输入框 (TextBox)和一个按钮 (Button),并且分别放入了校验控件。为了进行分组,
将其中一组的输入框、按钮和校验控件的
ValidationGroup属性设置为 Group1,而将另一组控件的 ValidationGroup属性设为
Group2。控件的布局如图 9.3所示。
解决方案:
只需将验证控件与对应的命令按钮的
ValidationGroup属性设为相同的值,各个验证组的 ValidationGroup属性值保持不同即可解决!
验证控件的注意事项
何时进行验证
验证控件始终在服务器代码中执行输入检查。
当用户向服务器提交页面之后,服务器将逐个调用验证控件来检查输入。如果检测到错误,
则该页面将自行设置为无效状态,以便在代码运行之前测试其有效性。
默认情况下启用客户端验证。如果要禁用客户端验证,只要将页的 ClientTarget属性设置为
,Downlevel”(,Uplevel”是强制客户端验证):
<%@ Page ClientTarget="Uplevel"%>
验证多个条件
每个验证控件通常只执行一次验证。如需要检查多个条件,可以将多个验证控件附加到页面上的一个输入控件,通过使用逻辑 AND运算符 来解析控件执行验证,
只有用户输入的数据通过所有验证才视为有效。
显示验证错误
要想获知页面上所有验证控件是否通过验证测试,可以使用 Page对象的 IsValid属性来判定,当 IsValid属性为 True时,表示通过验证,否则表示有错误。如果验证控件有错误,错误信息还可以通过
ValidationSummary控件显示。
几点说明:
1,ValidationSummary 汇总控件,它只能与其他控件一道使用,不能单独执行验证。它的作用是将来自页面上所有控件的错误信息集中在一起进行显示。
2、在这些控件中,除 RequiredFieldValidator控件以外,其他所有的控件都认为空字段是合法的。
3、允许将多个验证控件对某一个输入控件同时进行多方面的验证。例如可以指定某个控件既必须输入数据,同时输入的数据必须在指定的范围内。
此时就可以将 RequiredValidator和
RangeValidator两个控件同时指向该控件。
12.6 综 合 示 例
下面以一个订单信息页面为例练习使用多种类型的验证控件。窗体页的界面如图 9.4所示。中间部分为输入框,是被验证的对象,右边是错误提示,通常由验证控件拖入的位置确定 (最好放在被验证控件的旁边 )。错误提示内容在控件的 ErrorMessage属性中设置。程序运行时,只有错误出现时才会显示出来。
将“姓名”、“密码”、“订单号”、“地址” 4个输入框设置为必须输入验证 (RequiredFieldValidator)控件,如果输入为空时提示相应的错误信息。为“重复密码”输入框设置比较验证
(CompareValidator)控件用来和上一次输入的密码进行比较,看两者是否一致。为 E_mail输入框设置模式验证框
(RegularExpressionValidator)检查输入是否符合 E_mail的格式要求。
最后设置一个汇总 (ValidationSummary)控件,用来汇总验证的结果。
验证界面如图 9.4所示。
图 9.4 综合验证界面