ASP.NET中的自定义脚本回调

ASP.NET客户端回调代表着一种简洁而绝佳的方法,它可以在不发布和刷新当前页的情况下执行服务器端代码。我在2004年8月和12月的CuttingEdge专栏中讨论了ASP.NET回调,当时是从对服务器进行后台回调、向相关页发送输入数据以及接收响应的呈现页的角度对它们进行了讨论。然后,响应字符串由合适的客户端进行处理,并且通常通过动态HTML(DHTML)对象模型和嵌入到页面中的回调JavaScript函数来操作呈现的页面内容。

尽管回调的这种用法已经让人非常激动了,但它们还可以执行更多的任务。脚本回调机制也可以为服务器控件添加高级功能。通过实现几个接口,任何自定义控件都会被赋予脚本回调功能,以便使用后台往返来收集服务器数据以及更新用户界面—这就是本月我要讲述的主题。

受GridView控件的启发

如果您读过我最近写的一篇功能文章ASP.NET2.0GridView,您就会了解GridView控件无需刷新整个页面就可以显示新的记录页。实际上,GridView控件提供了一个基于ASP.NET脚本回调进行分页和排序的高级引擎。新页面的数据是在后台下载的,用户看不到。在数据到达客户端之后,这些数据将立即由JavaScript函数收集,并用于更新当前视图。

分页和排序回调并不是100%的客户端回调解决方案(如果您需要一个纯粹的客户端实现,请参阅2004年2月JeffProsise在WickedCode专栏中发表的文章)。GridView的分页和排序回调是按需工作的,它只下载需要的数据,而不会将整个数据源都下载到客户端上。您仍然要付出一个往返的代价,但是能够保证得到最新的数据,即使这些数据最近已经在服务器上更新过。

自从发现ASP.NET控件可以支持脚本回调功能之后,我感到非常兴奋,同时也促使我赶紧找出构建自己的脚本回调的方法。

顺便提一句,GridView并不是唯一一个支持类似功能的ASP.NET2.0控件。其他视图控件(如TreeView、DetailsView和FormView)也能以其他方式提供相同的功能。作为使用具有回调功能控件的开发人员,您不需要处理服务器端代码,也不用担心编写以及在宿主页中嵌入JavaScript代码的问题。该控件可以完成一切操作,它展示了一个直观的编程模型,您可以通过该模型控制脚本回调机制。

控件脚本回调基本知识

ASP.NET脚本回调机制由两个关键元素组成:响应用户操作的服务器端代码,以及客户端上处理服务器端事件所生成结果的JavaScript回调代码。在页面回调自身的情况下,正如我在前面提到的文章中所述的那样,您可以在执行对用户不可见的回发的页面按钮中附加一些ASP.NET生成的脚本代码。因为该请求的目标是当前页,所以该页会发布到自身,这与它在一个普通回发事件中的行为方式相似,只是页面的生命周期缩短了。该页必须实现ICallbackEventHandler接口,以便可以调用一个具有预定义签名的方法,来为客户端生成结果。

那么,当控件触发带外调用时,该方案又有什么不同呢?在这种情况下,“不可见”回发的目标URL是承载该调用方控件的页面的URL。该控件必须实现ICallbackEventHandler才能提供为客户端生成某些结果的方法。同样,该控件负责在承载页中插入处理结果和刷新该页所需的任何JavaScript代码。

具有回调功能的控件只是一个实现ICallbackContainer和ICallbackEventHandler接口的控件,两个接口都各有一个方法。ICallbackContainer接口具有的方法可以返回触发远程调用的脚本代码;ICallbackEventHandler接口则提供了在调用期间执行的服务器端代码。ICallbackEventHandler也是一个具有回调功能的页面必须实现的接口。一个实现回调接口的自定义控件示例的声明如下面的代码所示:

public class CallbackValidator : WebControl,
INamingContainer, ICallbackContainer, ICallbackEventHandler

在ICallbackContainer接口的实现中,您可能需要放入一个对该页GetCallbackEventReference方法的调用,以获得一个可启动服务器事件的正确JavaScript调用。稍后我再讲述这些内容。

时间: 2024-08-30 18:12:43

ASP.NET中的自定义脚本回调的相关文章

本地密码查看工具LaZagne中的自定义脚本开发

本文讲的是本地密码查看工具LaZagne中的自定义脚本开发,LaZagne是一款用于检索大量存储在本地计算机密码的开源应用程序. 因为每个软件储存密码的方式不尽相同(明文.API.定制算法.数据库等),所以该工具使用多种方法获取软件密码,目前支持的软件如下图 该工具通过python开发,易读.易维护,所以本文就尝试对其扩展,编写python脚本实现对360极速浏览器的密码导出,并且介绍脚本开发过程的细节. 0x01 简介 本文将要介绍以下内容: · 解决LaZagne中的bug · 开发脚本导出

ASP.Net中保护自定义的服务器控件

自定义服务器控件是扩展 ASP.NET Web 服务器控件的功能的一种方式.下文提供了针对自定义服务器控件的用户和开发人员的基本安全准则.有关创建自定义服务器控件的更多信息,请参见开发自定义 ASP.NET 服务器控件. IDE(如 Microsoft Visual Studio 2005)简化了自定义控件的使用及开发.但是,无论使用哪一 IDE,下面列出的安全准则均适用. 有关 ASP.NET Web 应用程序安全性的常规信息,请参见 ASP.NET Web 应用程序安全性. 针对自定义服务器

ASP.NET中保护自定义的服务器控件_实用技巧

自定义服务器控件是扩展 ASP.NET Web 服务器控件的功能的一种方式.下文提供了针对自定义服务器控件的用户和开发人员的基本安全准则.有关创建自定义服务器控件的更多信息,请参见开发自定义 ASP.NET 服务器控件. IDE(如 Microsoft Visual Studio 2005)简化了自定义控件的使用及开发.但是,无论使用哪一 IDE,下面列出的安全准则均适用. 有关 ASP.NET Web 应用程序安全性的常规信息,请参见 ASP.NET Web 应用程序安全性. 针对自定义服务器

ASP程序中常用的脚本语言_应用技巧

在浏览器中通过查看源代码的方式是无法看到ASP源代码的,你只能看到由ASP文件输出的结果,而那些只是纯粹的HTML而已.这是因为,在结果被送回浏览器前,脚本已经在服务器执行了. 实例: 用ASP写文本 以下为引用的内容: <html> <body> <% response.write("Hello World!") %> </body> </html> 向文本添加HTML 以下为引用的内容: <html> <

ASP程序中常用的脚本语言

在浏览器中通过查看源代码的方式是无法看到ASP源代码的,你只能看到由ASP文件输出的结果,而那些只是纯粹的HTML而已.这是因为,在结果被送回浏览器前,脚本已经在服务器执行了. 实例: 用ASP写文本 以下为引用的内容: <html> <body> <% response.write("Hello World!") %> </body> </html> 向文本添加HTML 以下为引用的内容: <html> <

艾伟_转载:ASP.NET中写自定义的Config Provider

一.写作前题     我们用ASP.NET做项目开发的时候,配置Config文件那是经常的事情,VS.NET的Config文件提供了很多节,但是往往提供的这些配置信息还不能够完全满足我们的项目开发需求,而且微软正是考虑到这方面的因素,他允许用户自定义Configuration的相关配置内容.本文就此写了一些实例,希望对大家有所帮助.   二.本文内容   1.实现web.config中的自定义2.对自定义节的使用3.本文总结 三.实现Web.Config中自定义节     废话不多说,直接说主题

在ASP.NET中创建自定义配置节(翻译)

asp.net|创建|asp.net 一.介绍 ASP.NET Web应用程序用一种内置的方法访问简单的"键/值"配置数据.在Web.config文件中,你可以创建节来存储简单的"键/值"对.例如,新建一个ASP.NET项目,在Web.config文件中添加如下的标记作为元素的子标记: 该节包含了用两个标记定义的"键/值"对,你可以通过Page对象内置的ConfigurationSettings属性获得它们的值.作为开始,在你的项目中新建一个名为

ASP.NET中使用自定义验证控件

asp.net|控件 asp.net 1.1中,有不少验证控件,大大方便了我们,但有的时候,当需要做特殊的验证时,还会觉得不够用的,于是我们可以用自定义验证控件CustomValidator,要使用这个控件,必须在服务端写相应的事件,格式如下: Sub FunctionName(sender as Object, args as ServerValidateEventArgs) ...End Sub其中注意两个参数 value:指示当前的CustomValidator验证的是哪一个控件 IsVa

在ASP.NET中使用JavaScript脚本的方法_javascript技巧

一)简单点的如要在一个按钮上增加认证脚本,可以这样 复制代码 代码如下: <%@ Page Language="C#" %><SCRIPT language="javascript"> function getconfirm (){    if (confirm("Do you want to delete record?")==true)     return true;    else    return false;