入门 我们知道在整个 ASP+ 开发过程中了解验证非常重要看看如今的大多数商业 Web 站点您会发现这些站点中有许多表单这些表单明显是通过执行大量手写的代码来执行验证编写验证代码并不是一件有趣的工作如果要通过编写代码来显示数据表或动态生成图表可能会很吸引人但是没有人可以向他的同事证实这种很酷的方法能够禁止在姓名字段中输入空值
因为其它一些原因Web 应用程序的验证也是非常麻烦的HTML 对您可以控制的内容或可以从用户处得到的反馈的限制很多因此无法应用在功能更全的客户机上可以使用的技巧例如禁止用户输入某些字符或发出嘀声使用浏览器脚本可能会产生更强大的验证但是这种方法很难得以证实因为客户浏览器中并非一定有脚本并且恶意的用户可以绕过因此为了保证站点安全有必要对服务器进行同样的检查
在开发 ASP+ 时我们的初衷是只使用一个控件来处理验证可能本该是一个能够显示错误的 TextBox 控件可是到了设计该控件时却发现无法实现这种愿望我们研究了大量的数据输入表单试图找到可以适用于尽可能多的表单的一种解决方案我们发现数据输入表单具有许多有趣的特性
尽管错误信息或图标经常与输入元素相邻但是它们几乎总是位于表的不同单元格中页面中经常会有一个区域来汇总所有错误许多站点包含客户端脚本以便提供更快捷的反馈同时防止白白地在与服务器之间往返许多包含客户端脚本的站点在出现错误时会显示信息框不仅会验证文本输入还会验证下拉列表和单选按钮如果某个字段为空站点通常会显示与该条目无效时不同的信息或图标许多有效性检查可以很好地代替常用的表达式验证通常是基于两个输入之间的比较结果% 或 % 以上的验证任务是一些常见的操作例如检查姓名或邮政编码大多数站点似乎仍在重复进行这些工作
因为站点之间的差别通常太大无法获得一种完美的解决方案来处理每个站点的所有验证任务考虑了上述所有情况最终获得的解决方案包括五个验证器控件ValidationSummary 控件以及与 Page 对象的集成同时很明显该解决方案需要扩展在客户机和服务器上均需要有一个 API 来配合
我们在研究进行的各种验证时发现我们似乎需要一个更大的工具箱在大多数组件环境中例如 Microsoft® ActiveX®我们可能本来试图将所有验证控件的功能集成到一个控件中处理不同模式下的不同属性不过幸好 Microsoft® NET 框架中有神奇的继承性可以提供一套控件来对特定的属性进行特定的验证因为派生每个新控件所需的额外工作量非常小
这些控件所完成的大多数工作均在其公用的父级 BaseValidator 中实现您也可以从 BaseValidator 或其它控件派生来完成各项工作实际上即使 BaseValidator 都懒得实现其自己的 Text 属性而是从 Label 属性继承
何时发生何事?
在处理包含验证 Web 控件的页面时了解事件序列非常有效如果某个验证条件是可选的您需要准确了解客户机和服务器上何时进行验证如果要自己编写验证例程可能会非常耗时或者有副作用同时了解调用验证例程的时机也很重要