ASP.NET脚本回调的原理

在看完两集Stargate并且洗了一个澡之后,我终于决定要开始写这篇文章。这是我第一篇真正意义上的原创技术文章,不管技术含量如何,我总算是迈出了这一步。博客其实开过不少,从最早的校园大巴,到博客园,以及我那个用来发牢骚的新浪博客,其实开博客最初的目的就是用来在写程序的同时,记录一下自己的学习的过程。但是后来演变成了用来发牢骚的东西,这也算是我一直以来不能专心钻研的恶果吧,不过所谓亡羊补牢为时未晚,就从这篇文章开始,变得专注一点,再专注一点。由这种专注的思想引导,我最近终于又开始好好的写程序,这次是真的放下了那些不想干的东西,专心致志的开始写我喜欢的C#代码,在我所知道的编程语言里面我最喜欢的是C#和Javascript,后者是种脚本语言,准确地说j是我最近才喜欢上的,我原来以为它也就同我小时候玩的Basic一般,小巧也简单,但是事实证明不是这个样子的,虽然它和VBS一样也是脚本语言,但是在它C语言的外表之下,其实隐藏着更多的内容,这个我可能会写另外的一篇文章来描述它,现在切入正题,我喜欢的.NET平台,不知道为什么01年的时候第一次使用C#语言写代码,就觉得它很漂亮,然后就爱上了他,不过那个时候由于环境的问题,所以一度中断,一直到了04年,才又重新拾起来,但是一年多的时候,我也只是在拉着一堆堆的控件,然后在属性面板里调整啊调整,似乎忘记了Web原来有的样子是怎么样的,后来终于有一样东西换起了我的回忆 -------- Ajax。

到处都是Ajax开发框架,其实在ASP.NET 2.0发布的时候内部其实就整合了一些类似的内容,在一些数据控件比如GridView上面就有使用,在05年一月份的MSDN Magazine中的一篇《Custom Script Callback in ASP.NET》(中文版 | English)让我认识到了asp.net 里面异步调用的魅力(里面的实现方法仅限于在beta1版本中实现,关于脚本回调部分beta1、beta2以及正式版本之间都有所不同,有兴趣者可以自己参见最近发布的MSDN内容),不过当时也只是玩了一下,后来使用Atlas,也就对它没怎么上心,不过前一段时间一个朋友和我讨论asp.net实现ajax时讲到,atlas实现太过于繁琐,而他要实现的只是几个非常小的内容不需要那么麻烦,由于我对除了这些之外的.NET的ajax框架不熟悉,所以自然而然的就想起了内置的脚本回调机制,利用(经过他本人同意的)朋友的项目,我们编写了很多关于这个的代码,在写完之后我突然发现了一个问题,就是代码太乱了。每个页面都是类似的东西,而且只能传递一个字符串参数让我们在除了交互方面对于一些大开销的数据展示只好使用内嵌框架来实现了。前两天到海图买了一本《Ajax 高级语言程序设计》,看了一部分之后突然想搞明白asp.net 2.0里面的脚本回调又是如果实现的?其实现在转回来头看,《Custom Script Callback in ASP.NET》一文中很多地方已经讲的很明白了,可以无奈当时的水平,很多东西看的都是云里雾里的,光顾者看效果了先贴一个我认为最简洁的实现效果,然后再进行剖析。

新建一个Default.aspx的页面,在页面上添加一个CheckBox控件,然后打开Default.aspx.cs文件,_Default类添加三个继承的接口ICallbackContainer、ICallbackEventHandler和INamingContainer:

[代码1]

#region ICallbackContainer 成员
public string GetCallbackScript(IButtonControl buttonControl, string argument)
{
   throw new Exception("The method or operation is not implemented.");
}
#endregion
#region ICallbackEventHandler 成员
string temp;
public string GetCallbackResult()
{
   //throw new Exception("Sample Error");
   return temp;
}
public void RaiseCallbackEvent(string eventArgument)
{
   temp = "_____" + eventArgument + " is succeed._____";
}
#endregion

转到Default.aspx.cs页面的Page_Load方法中加入下面代码:

[代码2]

proected void Page_Load(object sender, EventArgs e)
{
   string temp = Page.ClientScript.GetCallbackEventReference(this, "arg", "Callback", "context", "OnError", true);
   string script = "function CallServer(arg,context){" + temp + "}";
   Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "abc", script, true);
   CheckBox1.Attributes.Add("onclick", "CallServer('I call Server ','context');");
}

在编辑完CS代码之后,打开Default.aspx文件,在<head>...</head>之间加入下列代码:

[代码3]

<script type="text/javascript">
function OnError(err,context)
{
   alert(err);
}
function Callback(arg,context)
{
   alert(arg);
}
</script>

时间: 2024-08-28 21:54:57

ASP.NET脚本回调的原理的相关文章

跳出封装剖析ASP.NET脚本回调的原理

asp.net|封装|脚本      [注:此段与标题内容无关,可略过] 在看完两集Stargate并且洗了一个澡之后,我终于决定要开始写这篇文章.这是我第一篇真正意义上的原创技术文章,不管技术含量如何,我总算是迈出了这一步.博客其实开过不少,从最早的校园大巴,到博客园,以及我那个用来发牢骚的新浪博客,其实开博客最初的目的就是用来在写程序的同时,记录一下自己的学习的过程.但是后来演变成了用来发牢骚的东西,这也算是我一直以来不能专心钻研的恶果吧,不过所谓亡羊补牢为时未晚,就从这篇文章开始,变得专注

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

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

解析asp的脚本语言

   在HTML语言里,标示一个标签是用尖括号,在ASP语言里其实没有什么不同,唯一的区别仅仅是使用<% %>来表示一个ASP的脚本语言的开始和结尾.ASP的代码可以出现在一个HTML页的任何位置.具体来讲,就是,一段ASP的代码可以出现来一个HTML的标签的前面,也可以出现在一个标签的里面.总之,ASP 和 HTML被紧紧地相互嵌套在了一起. 转自:动态网制作指南 www.knowsky.com当你在工作中使用数据库的时候,其实你完全可以通过一段HTML的代码,创造一个模版,然后把数据库中一

浅析ASP.NET路由模型工作原理_实用技巧

ps:这是针对ASP.NET4.5版本的,好像在最新的5.0版本中加入了OWIN,彻底解耦了和Web服务器的耦合,我还没有研究过,不敢妄言4.5的模型适用5.0. action*0x1:大话ASP.NET模型 首先我们先来了解下一个请求的悲欢离合的命运,看看它的一生中所走过的蜿蜒曲折的道路.如下图所示: 在如上所示的风光旖旎的画卷中,我们可以看到一个"请求"从客户端浏览器出发,经历千山万水到达服务器,服务器的内核模块的HTTP.SYS热情款待了它,对它进行简单的修饰之后,就和它依依惜别

ASP入门教程-ASP和脚本语言

什么是 ASP ASP 称活动服务器页面(英文全称Active Server Pages)就是一个编程环境,在其中,可以混合使用HTML.脚本语言以及组件来创建服务器端功能强大的Internet应用程序. 如果您以前创建过一个站点,其中混合了HTML.脚本语言以及组件,您就可以在其中加入ASP程序代码.并且,还可以通过使用组件包含一些商业逻辑规则.组件可以被脚本程序调用,也可以由其他的组件调用. ASP的工作原理: 当在Web站点中融入ASP功能后,将发生以下事情: 1.用户调出站点内容,默认页

ASP远程脚本调用

远程脚本调用技术(Remote Scripting)的最大特点是:客户端脚本调用服务器脚本时无需刷新整个页面.一般情况下,Web页面需要与服务器交互时必须提交表单数据,刷新整个页面.这不仅不利于改善浏览效果,也不利于提高服务器效率.利用远程脚本调用技术(Remote Scripting),客户端脚本可以像调用本地函数一样调用远程脚本函数,从而极大地方便了交互式Web应用的开发.使得那些基于浏览器的应用更接近于传统的Win32应用.在复杂的表单验证和频繁的数据库操作中,应用远程脚本调用技术的优点是

浅谈ASP.NET客户端回调

最近同学要做一个项目,需求是:音乐播放器.大致UI如图: 点击右边的"X"图标,可以删除当前选定的这首歌.因为现实界面的代码是复制过来的,并且前辈使用的是拼接字符串,然后绑定到页面的.没有使用ASP.NET服务器控件,所以要做点击图标,然后删除的事件,与我们平时开发有所不同了.我觉得有3中方案可以解决这个问题. 1.最坏的办法,把这个UI界面使用GridView呈现,GridView是服 务器控件,所以最后一列可以是ImageButton,然后就有了服务器控件事件.解决起来就是,之前的

ASP中Session的运作原理

写过稍微大型一点 ASP 的人都知道,Session 这个对象真是好用,它可以用来记录使用者私有的资料变量,既安全又方便.但是你真的知道 Session 的运作原理吗?或许了解以后,你就再也不太敢使用这个令人又爱又恨的对象.虽然转而替代之的方法稍嫌麻烦,但在长期考量之下,也就不得不这么做了. 首先来讲讲 Session 的好处,它可以用来记录客户端私有的资料变量,并且在时间范围内不会消失.这真的是很重要的功能,尤其是有会员的系统必须要用到的.像是会员的登入帐号.时间.状态以及许许多多该记录的实时

ASP.NET 2.0 Membership原理及应用

asp.net 摘要:asp.net 2.0的Membership组件提供了一组非常简单易用的接口供开发者进行用户管理,用户验证.本文将它对它的实现原理进行简单的分析,介绍如何正确的使用,以及如何对它进扩展. 一.MembershipProvider抽象类 在很多情况下,在使用Membership的时候我们并不会直接使用到这个类.在MembershipProvider类定义的都是一些抽象方法和抽象属性,就是这些方法和属性构成了Membership接口的基本规范,而且在.NET 框架内部使用Mem