下载 PDC_userinput.exe 示例文件 (44 KB)。
对用户输入进行验证是基于 Web 的应用程序中常见的情况。为了开发应用程序,开发人员经常在这项工作中花费大量的时间和编辑大量的代码,比我们希望的多得多。在 ASP+ 页面架构的构建过程中,努力使输入验证这一任务比以前更容易是很重要的。
在 HTML 3.2中,验证数据是一个困难的过程。每次得到请求后,您需要编写代码来检查输入并向页面返回用户的错误,帮助用户正确填写验证窗体。对于最终用户、开发人员和服务器来说,这实在是一个繁杂的过程。
DTHML 和脚本语言使这一局面有所改善。它们在出现输入错误时可以立即反馈到用户,并在未改正前阻止用户发布页面。但是,这几乎不可能保证站点的每一个用户都拥有所需的脚本设计环境。这通常意味着,如果您要使用脚本改善网页的界面,就必须分别在客户机和服务器编写两次同样的验证逻辑,以防止无法执行客户机代码。
对于验证,我们的目标是:
我们访问了大量实际的网页来确定这些组件应该能够处理的场景。我们的目标是在今后的应用程序中极大地减少验证代码。
验证器控件是此解决方案的主要部分。验证器是一个可视的 ASP+ 控件,它用来检查另一个控件的特定验证条件。它通常以一段文字的形式出现在用户面前,根据它正在检查的控件是否发生错误来显示或隐藏。它也可以是一幅图像,甚至也可以不可见,但仍然做有用的工作。有五种可以执行不同类型检查任务的验证器控件。
解决方案的另一个元素是 ValidationSummary 控件。大的数据输入页面通常有一块列出所有错误的区域。ValidationSummary 通过从页面上的验证器控件自动收集并生成其中的内容。
解决方案的最后一个元素是页面对象自身。它显示最重要的“IsValid”属性,可以在服务器代码中检查并确定用户输入是否正确。
大多数网站在服务器上执行验证检查,您无论如何都要为无脚本的客户机编写基于服务器的检查,因此很难判断是否要为所有胖客户机重写所有检查。
验证控件改变了这一切,因为几乎所有重复的逻辑都封装在控件中。如果一个使用 IE 4.0 或更新版本的客户机使用了您的页面,那么它可以执行与在服务器上相同的验证,而无需编写任何特殊的客户机脚本。
客户机端验证过程包括以下几个特性:
为了有效地使用验证器,给出其严格的定义是很有帮助的,让我们提炼一下以前给出的定义:
“验证是一个控件,它在一个输入控件中检查某种特定类型的错误条件,并显示该问题的说明。”
这是一个重要的定义,因为它意味着您经常需要为每个输入控件使用多个验证器控件。
例如,如果您要检查文本框中的用户输入是否为 (a) 非空,(b) 在特定范围中的合法日期,或 (c) 小于在另一文本输入控件中的日期,那么您可能要使用三个验证器。这也许显得有些繁琐,但请记住这对用户是有帮助的,对所有这些情况您可能要使用三种不同的文本说明。
下面列出几种不同的验证器:
RequiredFieldValidator | 检查用户是否输入或选择了任何内容 |
RegularExpressionValidator | 根据规则表达式检查用户输入。该过程允许进行许多种类的检查,可以用于邮政编码和电话号码等的检查。 |
CompareValidator | 将输入控件与一个固定值或另一个输入控件进行比较。例如,它可以用在口令验证字段中。也可以用来比较输入的日期和数字。 |
RangeValidator | 与 CompareValidator 非常相似, 只是它用来检查输入是否在两个值或其它输入控件的值之间。 |
CustomValidator | 允许用户编写自己的代码以加入到验证框架中。 |
为了示范验证任务,我们将概要介绍向现有页面添加验证的过程。以下是一些必需条件的示例:
编写一个 Web 页面来收集新的用户 id 和口令。用户 id 必须包含 6-10 个字母字符,且必须是未使用的。口令必须包括 4-12 个字母,其中至少有一个数字和一个“@#$%^&*/”中的字符。用户必须再次输入口令以确保输入无误。
我将从一个 HTML 页面开始,该页面已做了最小程度的转换以适用于 ASP+ 页面框架。
转换页面的过程包括下述步骤:
起始代码:
验证示例;/title>
请输入新的用户 ID 和口令