当前位置: 首页 > 图文教程 > 网络编程 > ASP > 深入讲解 ASP+ 验证(四)

ASP
关于网站文件自动备份程序的一点思考
DBTree 1.3.2
抽取10万条数据,想起GetRows()
一份ASP内存的释放的实验报告
[整理版]ASP常用内置函数
Jmail组件发送邮件之绝对能用的函数
虚拟主机重启代码
Access 开发人员常犯错误大全
用Asp如何实现防止网页频繁刷新?
ASP 中使用 HTTP 协议发送参数详解
为什么 Windows2003 的 IIS6.0 不能上传超过 200K 的文件?
ASP类的写法
实例学习如何在ASP中调用DLL
被动式统计网站在线人数
[原创]完美解决ASP 不能更新。数据库或对象为只读。
5天学会asp
Wrance的图片系统目录直读版1.0
信息发布中的判断过期和有效期的东西
小偷程序2
一个ASP中的数组

深入讲解 ASP+ 验证(四)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 67 ::
收藏到网摘: n/a

  有效性规则和有用的错误信息

每个验证器会显示有关特定控件特定情况的特定错误信息。其中有一些确认是否有效的规则,开始,您作为一个开发人员可能会有些混淆,但是如果要生成对用户有实际帮助的错误信息,这些规则是必要的。

所有空的验证器(除了 RequiredFieldValidator)均会被认为有效。如果某个空值无效,您通常需要一个 RequiredFieldValidator 和一个其它验证器。您需要这样做,因为一般情况下,您总是希望对空验证器和有效性显示不同的错误信息。您也可以使用不明确的信息,例如“您必须输入一个值,并且该值必须在 1 和 10 之间”。

在输入字段无法转换为指定数据类型时使用的另一个特殊规则与 CompareValidator 和 RangeValidator 有关。对指定了 ControlToCompare 的 CompareValidator 进行的有效性评估过程类似如下所述:

如果 ControlToValidate 引用的输入字段为空,则有效。
如果 ControlToValidate 引用的输入字段无法转换成所需数据类型,则无效。
如果 ControlToCompare 引用的输入字段无法转换成所需数据类型,则有效。
输入字段转换成所需数据类型并进行比较。
第三步看起来有些不符合直觉。之所以这样评估,是因为如果验证器同时检查多个字段的有效性,很难为该验证器写出有意义的错误信息。应使用一个独立的验证器来报告 ControlToCompare 输入字段中的错误情况。RangeValidator 的工作方式类似,具有 maximum 和 minimum 属性。


Enabled、Visible 和 Display 属性的作用

验证器的 Enabled、Visible 和 Display 属性之间的区别可能不是非常明显。

Display=None 可以用来指定验证器不直接显示任何内容,但是仍然进行评估,仍然影响总体的有效性,并且仍可以将错误放在客户机和服务器上的摘要中。对于客户端验证,这些值确定使用可见性样式特性还是使用显示样式特性来打开或关闭验证器。对于服务器端验证,Display=Dynamic 表示输入有效时不显示任何内容,而 Display=Static 表示显示一个不换行的空格 ("&nbsp")。使用最后一个设置是为了表中只包含验证器的单元格在有效时,不会折叠成不显示任何内容。

为什么不只使用 Visible=false 使验证器不可见呢?在 ASP+ 中,控件的 Visible 属性有许多含义:Visible=false 的控件根本不会被处理来预显示或显示。正是因为这种含义,验证器的 Visible=false 意味着不仅不会显示任何内容,而且无法使用。不会对这样的验证器进行评估,不会影响页面的有效性,也不会将错误放在摘要中。

Enabled 则为中性。对于大多数情况,Enabled=false 与 Visible=false 的效果完全相同。在 Beta 1 版或更高版本中,存在一个重要的区别:在客户端验证中,禁用的验证器仍会发送到浏览器中,但是处于禁用状态。您可以使用客户端脚本中的 ValidatorEnable 函数激活该验证器。

使用 Visible 或 Enabled 控制是否进行验证时,应注意上述服务器上的事件顺序。或者在验证之前进行更改,或者在更改之后重新验证。否则,它们的 IsValid 值不会将更改反映到属性上。


CustomValidator 控件

扩展验证框架最简单的方法是使用 CustomValidator 控件。该控件既可以用来执行其它验证控件无法进行的验证,也可以执行需要访问服务器上信息(例如数据库或 Web 服务)的验证。

如果添加了只定义一个服务器验证函数的 CustomValidator,您会注意到,该验证器并不参与客户端验证。当用户使用 tab 键在各字段之间切换时,CustomValidator 不会更新,并且需要往返服务器一次以执行其验证。如果要使用 CustomValidator 执行不需要任何服务器上信息的检查,您也可以使用 ClientValidationFunction 属性让验证器完全参与客户端验证。假设您提供了一个 ClientValidationFunction,理想情况下,应与服务器验证处理程序执行完全相同的检查。但实际上,只是执行该验证的一部分。客户端验证函数进行的验证不要超过在服务器上执行的验证,因为黑客很容易绕过该验证函数。

以下是在客户机和服务器上使用 CustomValidator 的一个简单示例,只检查输入是否是偶数。以下先介绍服务器函数(在 C# 中):

        public bool ServerValidation(object source, string value) {
            try {
                int i = int.FromString(value);
                return ((i % 2) == 0);
            } catch {
                return false;