为了更好的创建交互式Web应用程序,加强应用程序安全性(例如,防止脚本入侵等),开发人员应该对用户输入的部分提供验证功能。过去,输入验证功能基本由自行编写的客户端脚本来完成这种实现方法既繁琐,又容易出现错误。随着技术的发展,ASP.NET技术通过提供一系列验证控件来克服这些缺点,例如,RequiredFieldValidator、CompareValidator、RangeValidator等。使用这些验证控件,开发人员可以向Web页面添加输入验证功能,例如定义验证规则、定义向用户显示的错误信息内容等。通常情况下,ASP.NET提供的验证控件可以满足大多数Web应用的需要,然而,在某些情况下,内置的验证控件还是无法完成应用需求对数据输入的特殊要求。为了弥补这个缺憾,ASP.NET 2.0定义了一个可以在控件开发中使用的可扩充验证框架。开发人员可以通过使用这个验证框架自行定义验证控件。本文将对实现验证控件的重要方面进行介绍,内容包括内置验证控件概述,验证框架等等。
1. 内置验证控件概述 验证控件完成对输入数据进行验证的功能。通过将验证控件和输入控件关联,开发人员可以向Web页面添加输入验证功能。另外,还提供了自定义验证规则的方法和自定义错误信息的内容和显示方式等。本节将概括性介绍ASP.NET内置验证控件。
ASP.NET 2.0共包含5个内置验证控件:RequiredFieldValidator、CompareValidator、RangeValidator、RegularExpressionValidator和CustomValidator,这些控件直接或者间接派生自System.Web.UI.WebControls.BaseValidator。每个验证控件执行特定类型的验证,并且当验证失败时显示自定义消息。下面简要介绍了这5个验证控件。
(1)RequiredFieldValidator控件
该控件用于确保被验证的控件中包含一个值。
(2)CompareValidator控件
该控件使用比较运算符(小于、等于、大于等)将用户输入与一个常量值或另一控件的属性值进行比较。
(3)RangeValidator控件
该控件用于检查用户的输入是否在指定的上下限内。可以检查数字对、字母字符对和日期对的范围。
(4)RegularExpressionValidator控件
该控件用于检查项与正则表达式定义的模式是否匹配。这种验证类型允许检查可预知的字符序列,如身份证号码、电子邮件地址、电话号码、邮政编码等中的字符序列。
(5)CustomValidator控件
该控件用于使用您自己编写的验证逻辑检查用户输入。这种验证类型允许检查在运行时导出的值。
除以上内置验证控件外,ASP.NET 2.0还提供了一个用于显示错误信息概要的控件ValidationSummary。该控件的目的是将来自页上所有验证控件的错误信息,一起显示在一个位置,例如,一个消息框或者一个错误信息列表。ValidationSummary控件不执行验证,但是它可以和所有验证控件一起使用,更准确的说,ValidationSummary可以和上述5个内置验证控件以及自定义验证控件,共同完成验证功能。
在Web页面中使用验证控件,我们需要注意以下几个关键的方面。
首先,将验证控件与输入控件关联起来,然后,根据不同类型验证控件的特征定义相关属性。例如:所有验证控件都要通过ContrlToValidate属性进行关联设置,都必须通过ErrorMessage属性定义错误信息内容;对于范围检查控件RangeValidator来讲,必须定义MaximumValue和MinimumValue属性来指定有效范围的最小值和最大值;对于模式匹配控件RegularExpressionValidator来讲,必须使用ValidationExpression属性指定用于验证输入控件的正则表达式。以上介绍的使用方式,很可能使得一个输入控件关联多个验证控件,这在ASP.NET 2.0中是允许的。
其次,ASP.NET 2.0中为验证控件提供了一个新属性ValidationGroup。开发人员可使用使用该属性将单个控件与验证组相关联,然后,使用多个ValidationSummary控件收集和报告这些组的错误。如果未指定验证组,则验证功能等效于ASP.NET 1.x中的验证功能。如果在多个控件中指定了多个验证组,则一定会显示多个验证摘要控件,因为一个验证摘要只显示一个组的验证错误。回发到
服务器且当前具有CausesValidation属性的控件也引入了此ValidationGroup属性,该属性确定当控件导致回发时应当验证的控件组。如果未指定验证组,则会验证默认组,默认组由所有没有显式分配组的验证程序组成。
最后,一旦在Web页面中正确包含验证控件,那么开发人员就可以使用自己的代码来测试页或者单个验证控件的状态。例如,在使用输入数据之前来测试验证控件的IsValid属性。如果为true,表示输入数据有效;如果为false,表示输入错误,并显示错误信息。对于Web页面来讲,只有当所有验证控件的IsValid都为true,即所有输入数据都符合验证条件时,Page类的IsValid属性才设置为true,否则为false。另外,在页面级验证中,ASP.NET 2.0还提供了两个新方法来支持验证功能。一个是来自Page类的GetValidators方法,该方法将检索属于指定验证组的验证程序。还有一个也是来自Page类的Validate方法的重载,其允许采用验证组作为参数。