Web 窗体的用户输入验证简介

通过使用验证控件,您可以向 Web 窗体页添加输入验证功能。验证控件为所有常用类型的标准验证(例如,测试在某一范围之内有效的日期或值)提供了一种易于使用的机制,另外还提供了自定义编写验证的方法。此外,验证控件允许您完全自定义如何向用户显示错误信息。

验证控件可以和在 Web 窗体页的类文件中处理的任意控件(其中包括 HTML 服务器控件和 Web 服务器控件)一起使用。有关更多信息,请参见 ASP.NET 服务器控件简介

安全说明   默认情况下,Web 窗体页将自动验证没有恶意用户试图将脚本发送到您的应用程序中。有关更多信息,请参见脚本利用

使用验证控件

通过像添加其他服务器控件那样向窗体添加验证控件,即可启用对用户输入的验证。有各种类型的验证控件,如范围检查或模式匹配验证控件。ASP.NET 服务器控件验证类型主题中包含了一个完整的列表。

每个验证控件都引用页面上其他地方的输入控件(服务器控件)。在处理用户输入(例如提交窗体)时,ASP.NET 页框架将用户输入传递到一个或多个适当的验证控件。验证控件将测试用户输入并设置表示输入是否通过测试的属性。在调用所有验证控件之后,页上将设置一个属性,如果任何一个控件显示验证检查失败,则整个页的属性都将设置为无效。

您可以使用自己的代码来测试页和单个控件的状态。例如,您将会在使用用户输入信息更新数据记录之前来测试验证控件的状态。如果检测到状态无效,您将会略过更新。通常如果任何验证检查失败,您都将跳过所有处理过程并将页返回给用户。检测到错误的验证控件随后将生成显示在页上的错误信息。

何时进行验证

验证发生的时间是:已对页进行了初始化(即,处理了视图状态和回发数据),但尚未调用“更改”或“单击”事件处理程序。

您可以在此之前(例如在页加载期间)调用控件的 Validate 方法来执行验证过程。有关更多详细信息,请参见通过编程验证 ASP.NET 服务器控件

验证多个条件

一般来说,每个验证控件只执行一个测试。但您常常需要检查多个条件。例如,您可能需要设定某个字段是必选字段和该字段限制为只接受特定范围内的日期这两个条件。

对于窗体上的一个输入字段,您可以附加多个验证控件。此时,控件执行的测试将使用逻辑 AND 解析。用户输入的数据必须通过所有测试才能视为有效。

有些情况下,几种不同格式的输入都可能是有效的。例如,在提示输入电话号码时,您可能允许用户输入本地号码、长途号码或国际长途号码。这主要出现在检查特定模式的数字或字符的情况下。要执行此类逻辑 OR 测试,您需要使用模式匹配验证控件并在该控件中指定多种有效模式。本例中无法使用多个验证控件,其原因在于测试使用的是逻辑 AND。

显示错误信息

验证控件通常在呈现的窗体中不可见。但是如果控件检测到错误,它将生成您指定的错误信息文本。错误信息可以以各种方式显示,如下表所示。

显示选项 说明
就地 每一验证控件可以分别就地显示一个错误信息或标志符号(通常位于出现错误的控件旁边)。
摘要 验证错误可以收集并显示在一处,例如页首。这一策略通常与在出错输入字段的旁边显示标志符号的方法结合使用。如果用户使用 Internet Explorer 4.0 或更高版本,则摘要可以显示在消息框中。
就地和摘要 同一错误信息的摘要显示和就地显示可能会有所不同。您可以使用此选项就地显示较为简短的错误信息,而在摘要中显示较为详细的信息,也可以在输入字段旁显示错误标志符号,而在摘要中显示错误信息。
自定义 您可以通过捕获错误信息并设计自己的输出来创建自定义错误显示。

如果使用就地显示或摘要显示选项,则您可以使用 HTML 设置错误信息文本的格式。

安全说明   如果您要创建自定义错误信息,一定要保证显示的信息不会有助于恶意用户危及您的应用程序。有关详细信息,请参见显示安全的错误信息

服务器端验证和客户端验证

验证控件在服务器代码中执行输入检查。当用户向服务器提交窗体之后,服务器将逐个调用验证控件来检查用户输入。如果在任意输入控件中出错,则该页将自行设置为无效状态,以便您可以在代码运行之前测试其有效性。

如果用户使用支持 DHTML 的浏览器,则验证控件还可以使用客户端脚本执行验证。这样做可以明显缩短页中的响应时间,错误将被立即检测到并且错误信息将在用户离开有错控件后立即显示。如果可以进行客户端验证,您将可以在很大程度上控制错误信息的布局并可以在消息框中显示错误摘要。有关更多详细信息,请参见 ASP.NET 服务器控件的客户端验证

即使验证控件已在客户端执行验证,页框架仍然在服务器上执行它,以便您可以在基于服务器的事件处理程序中测试有效性。此外,它还有助于防止用户通过禁用或更改客户端脚本来避开验证。

验证对象模型

您可以使用由单个验证控件和页公开的对象模型与验证控件交互。每个验证控件都公开自己的 IsValid 属性,您可以测试以查看是否通过该控件的验证测试。

在页级别,您可以访问另一个 IsValid 页属性,该属性是页上所有验证控件的 IsValid 状态的概括。这一属性使您可以轻松作出快速测试,查看您是否可以安全地继续进行处理。

该页还公开一个包含页上所有验证控件列表的 Validators 集合。您可以依次通过这一集合来检查单个验证控件的状态。

注意   客户端验证的对象模型中略有不同。有关详细信息,请参见 ASP.NET 服务器控件的客户端验证

自定义验证

您可以使用以下多种方法来自定义验证过程:

  • 您可以完全控制错误信息的格式、文本和位置,并且可以指定它们是单独出现还是以摘要的形式出现。
  • 您可以使用特殊控件创建自定义验证。该控件调用您的逻辑,但在设置错误状态、显示错误信息等其他方面和其他验证控件的工作方式相同。这为创建自定义验证逻辑但仍然参与页的验证框架提供了一种简便方法。
  • 如果指定了客户端验证,您就可以截获验证调用,并用您自己的验证逻辑替代或添加您自己的逻辑。

通过编程进行验证

默认情况下,验证控件在处理 Click 事件时执行其检查。但通过调用验证控件的 Validate 方法,您可以在您的代码中随时执行验证。调用此方法允许您通过编程评估属性设置的有效性。例如,您可以用方法而非 Web 窗体页从用户收集数据,然后通过编程来设置服务器控件属性。

有关更多详细信息,请参见通过编程验证 ASP.NET 服务器控件

请参见

Web 窗体验证 | 演练:验证 Web 窗体页中的用户输入