2.0 中的新增功能
- 验证组 -- 可为一组验证程序分配一个组名,以确保只对指定组中的控件进行验证。这样便可以在同一页上存在多个分别进行验证的控件组。
- 将焦点设置在错误上 -- 通过使用 ASP.NET 中的新增焦点 API 功能,可以对验证程序进行配置,以便将焦点设置在出现验证错误时将验证的关联控件上。提交窗体时,窗体中出现验证错误的第一个控件将接收到默认焦点。
- 区域性固定值 -- 当对比较验证程序的非强类型属性(CompareValidator.ValueToCompare、 RangeValidator.MaximumValue、RangeValidator.MinimumValue)进行转换时,如果 CultureInvariantValues 为 true,验证程序将使用非特定区域性格式(Date: YYYY/MM/DD、Double & Currency:US 区域性格式)执行转换。
- 验证空文本 -- ValidateEmptyText 属性用于解决 CustomValidator 中的问题。在 ASP.NET 1.0 中,如果 ValidationText 为空,不会引发自定义验证。可以将此属性设置为 true,以对空输入值引发自定义验证。
本节讨论 ASP.NET 2.0 中的上述功能以及其他验证功能。
Web 窗体框架包含一组验证服务器控件,这些控件提供了一种易于使用且功能强大的方式, 以检查输入窗体中的错误并在必要时向用户显示消息。 验证控件像其他服务器控件一样添加到 Web 窗体页。有不同的控件用于特定的 验证类型,如范围检查或模式匹配,以及确保用户不跳过输入字段的
RequiredFieldValidator。可以将多个验证控件附加到一个输入控件。例如,可以 既指定需要输入,又指定输入必须包含特定范围的值。
验证控件可用于 HTML 和 Web 服务器控件的有限子集。对于每个控件, 特定属性包含要验证的值。下表列出了可以验证的输入控件。
| 控件 | 验证属性 |
| HtmlInputText | Value |
| HtmlTextArea | Value |
| HtmlSelect | Value |
| HtmlInputFile | Value |
| TextBox | Text |
| ListBox | SelectedItem.Value |
| DropDownList | SelectedItem.Value |
| RadioButtonList | SelectedItem.Value |
| FileUpload | FileName |
验证控件的类型
最简单的验证窗体是必需的字段。如果用户在字段中输入任何值,则字段有效。 如果页中的所有字段都有效,则页有效。下面的示例使用
RequiredFieldValidator 阐释了这一点。
C# RequiredFieldValidator
还有用于特定验证类型(如范围检查或模式匹配)的验证控件。下表列出了验证控件。
| 控件名称 | 说明 |
| RequiredFieldValidator | 确保用户未跳过项目。 |
| CompareValidator | 使用比较运算符(小于、等于、大于等)将用户的输入与常量值或另一控件的属性值进行比较。 |
| RangeValidator | 检查用户的输入是否在指定的上下边界之间。可以检查数字、字母字符或日期对内的范围。可以将边界表示为常量。 |
| RegularExpressionValidator | 检查输入是否与正则表达式中定义的模式匹配。此类验证用于检查可预知的字符序列,例如身份证号码、电子邮件地址、电话号码、邮政编码等内的字符序列。 |
| CustomValidator | 使用您自己编写的验证逻辑检查用户的输入。此类型的验证可检查运行时派生的值。 |
| ValidationSummary | 以摘要形式显示页中所有验证程序的验证错误。 |
客户端验证
该验证控件始终在服务器代码中执行验证检查。但如果用户使用的 浏览器支持 DHTML,则验证控件也可以使用客户端脚本执行验证。 在客户端验证中,当向服务器提交窗体时在客户端检测任何错误。 如果发现任何验证程序存在错误,将取消向服务器提交窗体,并显示 验证程序的
Text 属性。这样可允许用户在将窗体提交给 服务器之前更正输入。包含错误的字段一失去焦点,就立即重新验证字段值, 从而为用户提供丰富的交互式验证体验。
请注意,即使已在客户端执行了验证,Web 窗体页框架也始终在服务器上 执行验证。这有助于防止用户能够通过模拟其他用户或预先 批准的事务避开验证。
默认情况下启用客户端验证。如果客户端可以,则将自动执行上层验证。 若要禁用客户端验证,请将页的
ClientTarget 属性设置为“Downlevel”(“Uplevel”强制执行客户端验证)。 也可以将某个验证程序控件的
EnableClientScript 属性设置为“false”,以对该特定控件 禁用客户端验证。
C# Client-side Validation
显示验证错误
在处理用户输入时(如提交窗体时),Web 窗体页框架会将 用户的输入传递给关联的一个或多个验证控件。验证控件测试用户的输入 并设置一个属性来指示输入是否通过了验证测试。处理完所有的验证控件后, 设置该页的
IsValid 属性;如果有任何控件显示 验证检查失败,则整个页被设置为无效。
如果验证控件有错误,错误信息可由该验证控件显示在页中,或者显示在页上其他地方的
ValidationSummary 控件中。当页的
IsValid 属性为 false 时, 显示
ValidationSummary 控件。它轮询页上的每个验证控件,并聚合 每个控件公开的文本消息。下面的示例演示如何使用
ValidationSummary 控件显示错误。
C# Validation Summary
使用 CompareValidator
CompareValidator 服务器控件可比较两个控件的值。
CompareValidator 使用三个关键属性执行验证。
ControlToValidate 和
ControlToCompare 包含要比较的值。
Operator 定义要执行的比较类型,例如 Equal 或 Not Equal。
CompareValidator 通过将这些属性计算为表达式来执行验证,如下所示:
( ControlToValidate ControlToCompare )
如果表达式计算为真,则验证结果有效。可以选择指定
ValueToCompare 属性而不是 ControlToCompare 属性,以针对静态值进行比较。
CompareValidator 服务器控件还可用于进行数据类型验证。例如,如果要从用户注册页 收集出生日期信息,可使用
CompareValidator 控件确认该日期的格式是可识别的, 然后再将它提交到数据库。
下面的示例演示如何使用
CompareValidator 控件。
C# CompareValidator
使用 RangeValidator
RangeValidator 服务器控件测试输入值是否位于给定的范围内。
RangeValidator 使用三个关键属性执行验证。
ControlToValidate 包含要验证的值。
MinimumValue 和
MaximumValue 定义验证范围的最小值和 最大值。
此示例演示如何使用
RangeValidator 控件。
C# RangeValidator
使用正则表达式
RegularExpressionValidator 服务器控件检查输入是否与正则表达式定义的 模式匹配。这类验证允许检查可预知的字符序列, 如身份证号码、电子邮件地址、电话号码、邮政编码等中的字符序列。
RegularExpressionValidator 使用两个关键属性来执行验证。
ControlToValidate 包含 要验证的值。
ValidationExpression 包含要匹配的正则表达式。
这些示例演示如何使用 RegularExpressionValidator 控件。
C# RegularExpressionValidator
C# RegularExpressionValidator 2
执行自定义验证
CustomValidator 服务器控件调用用户定义的函数来执行标准验证程序 无法处理的验证。自定义函数可以在服务器上或客户端脚本(如 JScript 或 VBScript)中执行。 对于客户端自定义验证,自定义函数的名称必须在
ClientValidationFunction 属性中 标识。自定义函数的形式必须为
function myvalidator(source, arguments)。请注意,
source 是客户端
CustomValidator 对象,而
arguments 是具有
Value 和
IsValid 两个属性 的对象。
Value 属性是要验证的值,而
IsValid 属性是一个 布尔值,用于设置验证的返回结果。
对于服务器端自定义验证,请将自定义验证放置在验证程序的
OnServerValidate 委托中。
下面的示例演示如何使用
CustomValidator 控件。
C# Custom Validator
ValidateEmptyText 2.0 中的新增功能
ValidateEmptyText 属性是 ASP.NET 2.0 中的新增功能,用于解决 CustomValidator 中的问题。在 ASP.NET 1.0 中,如果
ControlToValidate 的文本为空,将不会引发自定义验证。 可以将此属性设置为 true,以对空输入值引发自定义验证。
验证组 2.0 中的新增功能
当用户要在同一页中执行单独的验证方案时,可以使用
ValidationGroup 属性。 在验证程序控件以及引起验证的按钮或其他回发控件上设置组名称。 这对于
Wizard 控件、
MultiView 或数据控件(编辑)很有用。默认情况下,所有验证程序都位于 "" 组(默认组)中,以便向后兼容。
Page 还公开
GetValidators("group") 方法和
Validate("group") 方法。
Page.IsValid 反映已调用
Validate 的所有控件(累积)的有效性。
下面的示例演示 ValidationGroup 属性。若要查看该行为,请单击该页中的第一个 (Search) 按钮, 然后单击该页中的第二个按钮。请注意,每次单击时将引发一组不同的验证程序。
C# Validation Groups
SetFocusOnError 2.0 中的新增功能
ASP.NET 2.0 中的另一个新验证功能是
SetFocusOnError,该功能在验证程序控件中设置,可使得第一个无效控件接收焦点。 有关 SetFocusOnError 的更多信息,请参考
焦点 API 主题(位于
提示和技巧 节)。
典型的验证窗体
此示例演示一个典型的注册窗体,它使用本节中讨论的验证控件的变体。
C# Validation Form