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

ASP.NET
赫赫大名的A*寻路算法(vb.net版本)
asp.net(c#)下Jmai去说明 使用与下载
[原创]完美解决Could not load file or assembly ''AjaxPro.2'' or one of its dependencies. 拒绝访问。
asp.net下gridview 批量删除的实现方法
用CSS实现图片倾斜 只支持IE
.net get set用法小结
vs 不显示行号的操作方法
ASP.NET页面进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)
ASP.Net不执行问题一解
asp.net 无限分类
让VS2008对JQuery语法的智能感知更完美一点
扩展方法ToJSON() and ParseJSON()
asp.net下PageMethods使用技巧
Linq to SQL Delete时遇到问题的解决方法
实现ASP.NET多文件上传程序代码
ASP.NET AJAX 1.0 RC开发10分钟图解
asp.net get set用法
ASP.NET下使用WScript.Shell执行命令
asp.net2.0实现邮件发送(测试成功)
Asp.net 无限级分类实例代码

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


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

客户端的验证

如果您的页面启用了客户端验证,则在往返过程中会发生完全不同的事件序列。客户端的验证使用客户端 JScript® 实现。实现该验证不需要任何二进制组件。

尽管 JScript 语言的标准化做得很好,但是用于与浏览器中的 HTML 文档交互的文档对象模型 (Document Object Model, DOM) 没有广泛采用的标准。因此,客户端的验证只在 Internet Explorer 4.0 和更高版本中进行,因为该验证的对象是 Internet Explorer DOM。

从服务器的角度来说,客户端的验证只意味着验证控件将不同的内容发送到 HTML 中。除此之外,其事件序列完全相同。服务器端的检查仍然执行。尽管看起来似乎多余,但是却十分重要,因为:

某些验证控件可能不支持客户端脚本。有一个很好的例子:如果要同时使用 CustomValidator 和服务器验证函数,但是没有客户机验证函数。
安全性注意事项。某些人可以很容易得到一个包含脚本的页面,然后禁用或更改该页面。您不应利用脚本来阻止坏数据进入您的系统,而只应是为了用户得到更快的反馈。因此,如果要使用 CustomValidator,则不应提供没有相应服务器验证函数的客户机验证函数。
每个验证控件都可以确保将一个标准的客户端脚本块发送到页面中。实际上,这只是一小部分代码,其中包含对脚本库 WebUIValidation.js 中的代码的引用。这个脚本库文件包含客户端验证的所有逻辑,该文件需单独下载,并且可以存储在浏览器的缓存中。

关于脚本库

因为验证 Web 控件脚本在脚本库中,所以不必将所有客户端验证的代码直接发送到页面中,尽管表面上似乎是这样做的。主要的脚本文件引用类似如下所示:

<script language="javascript"
src="/_aspx/1.0.9999/script/WebUIValidation.js"></script>

默认情况下,脚本文件将安装在 "_aspx" 目录中默认的根目录下,并使用相对于根的脚本 include 指令调用,该指令以正斜线开头。该引用表明每个单独的对象不必包含脚本库,同一台计算机上的所有页面可以引用同一个文件。您会注意到,该路径中还有一个公用的语言运行时版本号,以便不同的运行时版本可以在同一台计算机上运行。

如果查看一下您默认的虚拟根目录,您会找到该文件并查看其中的内容。这些文件的位置在 config.web 文件中指定。config.web 文件是一个用于大多数 ASP+ 设置的 XML 文件。以下是该文件中位置的定义:

<webcontrols
clientscriptslocation="/_aspx/{0}/script/"
/>

鼓励您阅读该脚本,以便深入了解发生的事件。不过,建议您不要修改这些脚本,因为它们的功能与特定的运行时版本紧密相连。在运行时版本更新时,这些脚本可能也需要相应的更新,您将或者放弃更改,或者面临脚本不工作的问题。如果特定项目必须更改这些脚本,先备份这些脚本,然后将您的项目指向备份文件,方法是使用私有的 config.web 文件替代这些文件的位置。如果字符串中包含格式指令 "{0}",运行时版本号将替换该指令。最好将该位置更改为一个相对引用或绝对引用。

禁用客户端的验证

有时您可能不希望进行客户端验证。如果输入字段的数目很少,客户端验证可能用处不大。您毕竟每次都要有一个需要往返服务器一次的逻辑。您会发现客户机上动态出现的信息对您的布局会有负面影响。

要禁用客户端验证,应使用 Page 指令 "clienttarget=downlevel"。该指令类似以下 ASPX 文件的开头:

<%@ Page Language="c#" clienttarget=downlevel %>

该指令的默认值为 "auto",表示您只对 Microsoft Internet Explorer 4.0 或更高版本进行客户端验证。

注意: 不幸的是,在 Beta 1 中,该指令并非仅仅是禁用验证,同时还会使所有 Web 控件使用 HTML 3.2 标记来处理,这可能会产生意想不到的结果。最终版本提供了更好的方法来控制这个问题。

客户端事件序列

该序列是在运行包含客户端验证的页面时发生的事件序列:

在页面载入浏览器时,需要对每个验证控件进行一些初始化。这些控件作为 <span> 标记发送,其 HTML 特性与服务器上的特性最接近。最重要的是,此时会将验证器引用的所有输入元素“挂接”。被引用的输入元素将修改其客户端事件,以便在每次输入更改时调用验证例程。
脚本库中的代码将在用户使用 tab 键在各字段之间切换时执行。某个独立的字段更改时,将重新评估验证条件,根据需要使验证器可见或不可见。
当用户尝试提交表单时,将重新评估所有验证器。如果这些验证器全部有效,表单将提交给服务器。如果存在一处或多处错误,则会出现下述情况:
提交被取消。表单并不提交给服务器。
所有无效的验证器均可见。
如果某个验证摘要包含 ShowSummary=true,则将收集来自验证控件的所有错误,并使用这些错误更新其内容。
如果某个验证摘要包含 ShowMessageBox=true,则将收集错误,并在客户机的信息框中显示这些错误。
因为在每次输入更改时或提交时会执行客户端验证控件,所以在客户机上通常会评估