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

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

ASP.NET 中的 深入讲解 ASP+ 验证(一)


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

Anthony Moore
Microsoft Corporation
2000年10月
摘要:有关使用 ASP+ 验证 Web 控件的详细讲解
简介

这篇文章详细讲解了 ASP+ 验证控件的工作方式。如果要生成其中包含验证控件的复杂页面,或是要扩展验证框架,建议您阅读本文。如果要学习使用验证控件,或是要决定是否使用验证控件,请参见“ASP+ 中的用户输入验证(英文)”。


入门

我们知道,在整个 ASP+ 开发过程中,了解验证非常重要。看看如今的大多数商业 Web 站点,您会发现,这些站点中有许多表单,这些表单明显是通过执行大量手写的代码来执行验证。编写验证代码并不是一件有趣的工作。如果要通过编写代码来显示数据表或动态生成图表,可能会很吸引人,但是没有人可以向他的同事证实这种很“酷”的方法能够禁止在姓名字段中输入空值。

因为其它一些原因,Web 应用程序的验证也是非常麻烦的。HTML 3.2 对您可以控制的内容或可以从用户处得到的反馈的限制很多,因此无法应用在功能更全的客户机上可以使用的技巧,例如禁止用户输入某些字符,或发出嘀声。使用浏览器脚本可能会产生更强大的验证。但是这种方法很难得以证实,因为客户浏览器中并非一定有脚本,并且恶意的用户可以绕过。因此,为了保证站点安全,有必要对服务器进行同样的检查。

在开发 ASP+ 时,我们的初衷是只使用一个控件来处理验证,可能本该是一个能够显示错误的 TextBox 控件。可是到了设计该控件时,却发现无法实现这种愿望。我们研究了大量的数据输入表单,试图找到可以适用于尽可能多的表单的一种解决方案。我们发现,数据输入表单具有许多有趣的特性:

尽管错误信息或图标经常与输入元素相邻,但是它们几乎总是位于表的不同单元格中。
页面中经常会有一个区域来汇总所有错误。
许多站点包含客户端脚本,以便提供更快捷的反馈,同时防止白白地在与服务器之间往返。
许多包含客户端脚本的站点在出现错误时会显示信息框。
不仅会验证文本输入,还会验证下拉列表和单选按钮。
如果某个字段为空,站点通常会显示与该条目无效时不同的信息或图标。
许多有效性检查可以很好地代替常用的表达式。
验证通常是基于两个输入之间的比较结果。
90% 或 90% 以上的验证任务是一些常见的操作,例如检查姓名或邮政编码。大多数站点似乎仍在重复进行这些工作。
因为站点之间的差别通常太大,无法获得一种完美的解决方案来处理每个站点的所有验证任务。
考虑了上述所有情况,最终获得的解决方案包括五个验证器控件、ValidationSummary 控件以及与 Page 对象的集成。同时很明显,该解决方案需要扩展,在客户机和服务器上均需要有一个 API 来配合。

我们在研究进行的各种验证时发现,我们似乎需要一个更大的工具箱。在大多数组件环境中,例如 Microsoft® ActiveX®,我们可能本来试图将所有验证控件的功能集成到一个控件中,处理不同模式下的不同属性。不过,幸好 Microsoft® .NET 框架中有神奇的继承性,可以提供一套控件来对特定的属性进行特定的验证,因为派生每个新控件所需的额外工作量非常小。

这些控件所完成的大多数工作均在其公用的父级 BaseValidator 中实现。您也可以从 BaseValidator 或其它控件派生来完成各项工作。实际上,即使 BaseValidator 都懒得实现其自己的 Text 属性,而是从 Label 属性继承。


何时发生何事?

在处理包含验证 Web 控件的页面时,了解事件序列非常有效。如果某个验证条件是可选的,您需要准确了解客户机和服务器上何时进行验证。如果要自己编写验证例程,可能会非常耗时,或者有副作用。同时,了解调用验证例程的时机也很重要。

首先,让我们看一下服务器。