在 ASP.NET 网页中验证用户输入

更新:2007 年 11 月

通过使用验证控件,可以向 ASP.NET 网页中添加输入验证。验证控件为所有常用的标准验证类型(例如,测试某范围内的有效日期或值)提供了一种易于使用的机制,以及自定义编写验证的方法。此外,验证控件还允许自定义向用户显示错误信息的方法。

验证控件可与 ASP.NET 网页上的任何控件(包括 HTML 和 Web 服务器控件)一起使用。有关更多信息,请参见 ASP.NET Web 服务器控件概述

7kh55542.alert_security(zh-cn,VS.90).gif安全说明:

默认情况下,ASP.NET 网页会自动检查有无潜在的恶意输入。有关更多信息,请参见脚本侵入概述

使用验证控件

通过像添加其他服务器控件那样向页面添加验证控件,即可启用对用户输入的验证。有各种类型的验证控件,如范围检查或模式匹配验证控件。有关验证类型的完整列表,请参见 ASP.NET 服务器控件验证类型。每个验证控件都引用页面上其他地方的输入控件(服务器控件)。处理用户输入时(例如,当提交页面时),验证控件会对用户输入进行测试,并设置属性以指示该输入是否通过测试。调用了所有验证控件后,会在页面上设置一个属性以指示是否出现验证检查失败。

可将验证控件关联到验证组中,使得属于同一组的验证控件可以一起进行验证。可以使用验证组有选择地启用或禁用页面上相关控件的验证。其他验证操作(如显示 ValidationSummary 控件或调用 GetValidators 方法)可以引用验证组。

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

7kh55542.alert_note(zh-cn,VS.90).gif说明:

更新、插入和删除数据的数据绑定控件(如 GridViewFormViewDetailsView 控件)会在执行数据更新操作之前自动验证是否通过验证检查。

何时进行验证

验证控件在服务器代码中执行输入检查。当用户向服务器提交页面之后,服务器将逐个调用验证控件来检查用户输入。如果在任意输入控件中检测到验证错误,则该页面将自行设置为无效状态,以便在代码运行之前测试其有效性。验证发生的时间是:已对页面进行了初始化(即,处理了视图状态和回发数据),但尚未调用任何更改或单击事件处理程序。

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

即使验证控件已在客户端执行验证,ASP.NET 仍会在服务器上执行验证,这样可以在基于服务器的事件处理程序中测试有效性。此外,在服务器上进行重新测试有助于防止用户通过禁用或更改客户端脚本检查来逃避验证。

可通过在代码中调用验证控件的 Validate 方法来调用验证。有关更多信息,请参见如何:以编程方式验证 ASP.NET 服务器控件

验证多个条件

每个验证控件通常只执行一次测试。但您可能需要检查多个条件。例如,您可能需要指定必需的用户输入,同时将该用户输入限制为只接受特定范围内的日期。

可以将多个验证控件附加到页面上的一个输入控件。此时,将使用逻辑 AND 运算符来解析控件执行的测试,这意味着用户输入的数据必须通过所有测试才能视为有效。

有些情况下,几种不同格式的输入都可能是有效的。例如,在提示输入电话号码时,您可能允许用户输入本地号码、长途号码或国际长途号码。由于用户输入必须通过所有测试才能视为有效,因此,在此实例中使用多个验证控件不起作用。若要执行此类测试(必须仅通过一个测试的逻辑 OR 运算),请使用 RegularExpressionValidator 验证控件并在该控件中指定多个有效模式。或者,还可以使用 CustomValidator 验证控件并编写自己的验证代码。

显示错误信息

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

Display 方法

说明

内联

每一验证控件可以单独就地(通常在发生错误的控件旁边)显示一条错误信息。

摘要

验证错误可以收集并显示在一个位置,例如页面的顶部。这一策略通常与在发生错误的输入字段旁显示消息的方法结合使用。如果用户使用 Internet Explorer 4.0 或更高版本,则摘要可以显示在消息框中。

如果使用验证组,则每个单独的组需要一个 ValidationSummary 控件。

就地和摘要

同一错误信息的摘要显示和就地显示可能会有所不同。可使用此选项就地显示简短错误信息,而在摘要中显示更为详细的信息。

自定义

您可以通过捕获错误信息并设计自己的输出来自定义错误信息的显示。

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

7kh55542.alert_security(zh-cn,VS.90).gif安全说明:

如果要创建自定义错误信息,请确保显示的信息不会帮助恶意用户损害您的应用程序。有关更多信息,请参见如何:显示安全错误信息

验证对象模型

通过使用由各个验证控件和页面公开的对象模型,可以与验证控件进行交互。每个验证控件都会公开自己的 IsValid 属性,可以测试该属性以确定该控件是否通过验证测试。页面还公开一个 IsValid 属性,该属性总结页面上所有验证控件的 IsValid 状态。该属性允许您执行单个测试,以确定是否可以继续自行处理。

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

7kh55542.alert_note(zh-cn,VS.90).gif说明:

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

自定义验证

可采用以下方法自定义验证过程:

  • 可以指定错误信息的格式、文本和位置。此外,还可以指定是单独显示错误信息还是显示为摘要。

  • 可以使用 CustomValidator 控件创建自定义验证。该控件调用您的逻辑,但在设置错误状态、显示错误信息等方面和其他验证控件的工作方式相同。这为创建自定义验证逻辑(同时仍在页面的验证框架中使用)提供了一种简便方法。

  • 对于客户端验证,可以截获验证调用,并用您自己的验证逻辑替代或添加您自己的验证逻辑。

请参见

其他资源

验证 ASP.NET 控件