热门文章 | 热门软件| 热门源码 | 热门电影 | 知识库 | 联系我们
软件 源码 教程 影视 健康 招聘
  HTML | JavaScript | ASP | PHP | JSP | NET | VB | VC | VF | Windows | Linux | Mysql | Mssql | Oracle | Struts 
当前位置: 创世纪计算机资源网 -> 文章频道 ->net 
站内搜索:
ASP.NET中的自定义脚本回调(2)
作者:佚名 来源:不详 整理日期:2007-3-20

  CallbackValidator 控件
  
  为了解具有回调功能的服务器控件,们来看一个具有 ASP.NET 脚本回调功能的自定义验证器控件示例。在 ASP.NET 中,验证控件用于检查并验证网页中定义的窗体域的输入。验证器是一个服务器控件,它是从 BaseValidator 类继承的,而该类又是从 Label 继承的。
  
  每个验证控件都引用一个位于该页其他位置的输入控件。当页面要提交时,任何受监视服务器控件的内容都会传递到该验证器,以进行进一步处理。每个验证器都执行一种不同类型的验证。例如,CompareValidator 控件使用比较运算符(如小于、等于或大于)将用户的输入与一个固定值进行比较。RangeValidator 确保用户输入位于某个指定范围内,而 RegularExpressionValidator 只在匹配某个常规表达式定义的模式时才验证用户输入。
  
  通常,验证都在服务器上发生。然而 ASP.NET 还为大多数验证控件提供了一个完整的客户端实现,并允许用户为其余验证控件编写自定义客户端脚本。这就使得具有 DHTML 功能的浏览器(如 Microsoft?Internet Explorer 4.0 和更高版本)在用户点击或单击受监视输入域之外的位置后,能够立即在客户端上执行验证。在很多情况下,客户端验证足够强大,可以检测出许多重大错误并通知用户。例如,RequiredFieldValidator 控件可验证给定域不能保留为空。无需回发到服务器即可验证当前值。
  
  如果客户端验证打开,则在所有输入域均包含有效数据之前,该页不会回发。为了运行安全代码,以及防止恶意和秘密的攻击,您还是应该在服务器上验证数据;服务器端验证始终由验证器控件执行,即使同时要执行客户端验证也是如此。另外,并非所有类型的验证都能在客户端上完成。实际上,如果您需要针对数据库进行验证,则没有别的选择,只能回发到服务器。而这也正是发生问题的地方。
  
  常规回发涉及整个页面。上载整个视图状态,处理整个页面,生成、下载和呈现同样的大型响应。如果您能够向服务器发出经过优化的带外请求,并只检查验证之下的控件的状态,那岂不是很好?
  
  在 ASP.NET 中,没有这样的控件。那么们就来编写一个这样的控件吧,将其命名为 CallbackValidator。CallbackValidator 是一个自定义 ASP.NET 2.0 控件,构建这个控件的目的是为了演示控件可以如何实现对承载页的带外调用,以及如何在服务器上自行处理事件。
  
  在开始着手此项目时,实际上并没有如此雄心勃勃的目标:原先的目标只是修改 CustomValidator 标准控件。对于该记录,CustomValidator 控件采用了以编程方式定义的验证逻辑来检查用户输入的有效性。如果预先不知道要检查的值,则应该使用此方法。CallbackValidator 控件的最初意图是提供一种方法,以便在不回发整个页面的情况下执行服务器端验证。意识到无需太多的额外努力,就可以拥有一个类似于自定义按钮的控件,这个控件可以在不回发整个页面的情况下在服务器上对许多输入域进行验证,而此时的修改工作已经完成了一半。这个行为就是 CallbackValidator 控件的全部。
  
  在深入讲述该控件的精髓之前,们先来看一下图 1。该页面上的 Submit 按钮只会按照普通的方式将所有值发布到服务器上。实际上,这些值将在客户端上进行处理,如果所有这些值都需要传递,那么该控件就会将其传递到服务器上,在该服务器上,所有控件输入都将使用服务器端验证代码(如果有的话)进行验证。Validate 按钮会触发一个对 Web 服务器的带外调用,并只验证指定的输入控件。在它返回时,您就会知道哪些值已经通过了服务器的验证。例如,在图 1 中,您将在尝试提交其余数据之前了解到是否已经采用了该用户 ID。
  
 

  
图 1 带有具有回调功能验证的输入窗体

  图 2 显示了该页面的源代码。正如您可以看到的那样,它包含了一个 HTML 服务器窗体、一些文本框(每个文本框都绑定到一个标准的验证控件)以及该自定义 CallbackValidator 控件的一个实例。此控件实际上负责创建并显示 Validate 按钮。
  
  该控件如何工作
  
  该 CallbackValidator 控件从 WebControl 继承,并实现了 INamingContainer 接口。另外,它还实现了 ICallbackContainer 和 ICallbackEventHandler 接口,以便获得回调支持。
  
  ICallbackContainer 接口需要方法 GetCallbackScript 按照下列方式声明:
  
  string GetCallbackScript(IButtonControl buttonControl, string argument)
  
  GetCallbackScript 采用两个参数。第一个是对预期要触发回调的页面控件的引用。第二个参数(字符串)表示调用方希望传递给方法以帮助构建输出的任何上下文。从名称可以看出,GetCallbackScript 方法使用 JavaScript 函数调用来准备和返回字符串,以便附加到指定的按钮控件来触发远程调用。
  
  该按钮控件参数使您能够精确地指定要对控件 UI 中的哪个按钮进行 JavaScript 调用。该示例 CallbackValidator 控件只有一个可单击按钮;而 GridView 控件则具有很多可单击按钮,每个按钮都用于页导航或标头中的一个链接按钮。在 ASP.NET 2.0 中,所有充当窗体中按钮角色的控件都需要实现一个新的接口 ― IButtonControl。
[1]  [2]  
相关文章