当前位置: 首页 > news >正文

再谈ASP.NET第一 - ASP.NET2.0的回调机制

本文参考《ASP.NET2.0经典案例教程》的部分内容。

虽然现在各种各样的Ajax已近流行很久,但本文还是回顾一下ASP.NET2.0的Ajax技术 - 回调,就当是个怀旧。回调的作用类似于ASP.NET Ajax,其使浏览器能够异步调用远程服务器,而无需刷新页面。

    回调实现的方法及执行的过程如下:

1. 让页面实现ICallbackEventHandler接口,实现该接口的WebForm将自动添加客户端JavaScript函数。GetCallbackEventReference方法获取上文提到的客户端JavaScript函数的名称。该函数即是回调的发起者。

2. 在客户端注册的JavaScript中包含了一个回调管理器。其负责在浏览器与服务器之间发起或响应XmlHttp通信。页面中以回调方式发送给服务器的请求将被回调管理器拦截,并以符合Xml Http的方式将这个请求发送到服务器。

3. 回调管理器将请求发送到服务器后,服务器调用ICallbackEventHandler.RaiseCallbackEvent()来处理。开发人员将处理请求的逻辑放置在这个函数中,处理调用并返回响应,响应的返回值可以为字符串。

4. 响应被返回给回调管理器,回调管理器通知调用者回调已完成,并将响应字符串交给最初的调用者。

 

下面将给出一段示例性代码来展示这个过程。

1. 首先新建一个WebForm名为CallBack.aspx,并让这个CallBack类实现ICallbackEventHandler接口。

1 public partial class Callback : System.Web.UI.Page,ICallbackEventHandler

 

2. 在VS中使用重构工具显示实现这个接口,会生成如下两个方法。

 1 #region ICallbackEventHandler 成员
 2 
 3 string ICallbackEventHandler.GetCallbackResult()
 4 {
 5     throw new NotImplementedException();
 6 }
 7 
 8 void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
 9 {
10     throw new NotImplementedException();
11 }
12 
13 #endregion

其中RaiseCallbackEvent()接受来自客户端的调用,让服务器能够处理所需的业务逻辑,GetCallbackResult()函数将响应返回给客户端,让客户端能够通过JavaScript在浏览器中显示更新。

 

3. 这一步提供客户端脚本,函数名分别为CallServer和ReceiveServerData的函数提供了回调管理器脚本的入口和出口。

1 protected void Page_Load(object sender, EventArgs e)
2 {
3     ClientScriptManager cm = Page.ClientScript;
4     string cbReference;
5     cbReference = cm.GetCallbackEventReference(this, "arg", "ReceiveServerData", "");
6     string callbackScript = "";
7     callbackScript += "function CallServer(arg, context){" + cbReference + ";}";
8     cm.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true);
9 }

 

4. 在Form中添加一个文本框的表单元素,将其命名为txtMessage。其用来取得用户要提交给服务器的数据。

1 <input id="txtMessage" type="text" style="width: 218px; height: 55px" />

 

5. 接下来添加一个按钮,按钮的onclick事件处理中调用回调管理器的入口(即第3步中的CallServer函数)。

1 <input id="Button1" type="button" value="Send"
2          onclick="CallServer(document.getElementById('textMessage').value,null)" 
3          style="width:57px;height:60px" />

onclick接受txtMessage控件的text值作为参数。

 

6. 在窗体中添加名为ReceiveServerData()的JavaScript函数。该函数接受参数arg和context。Arg提供服务器处理完调用后返回的响应。在这其中可以编写任意的Js代码来更新html。

1 <script type="text/javascript">
2     function ReceiveServerData(arg, context) {
3         var obj = document.getElementById("result");
4         obj.innerHTML += arg;
5     }
6 </script>

 

最后附上这个页面文件供参考。

转载于:https://www.cnblogs.com/lsxqw2004/archive/2009/10/07/1579088.html

相关文章:

  • Yue Fei's Battle(组合计数递推)
  • apache地址限制和用户访问
  • Zigbee
  • 我谈通“下水道”(系列连载6)--新的征程
  • SpringBoot入门——应用devtools进行热部署
  • 对Action方法的参数进行双向转化
  • MATLAB中帮助的几种使用方法
  • 伪静态技术说明
  • Java中Model1和Model2
  • config jre for openoffice3.0
  • 2017敏捷沙滩大会概述:学习、心理安全和持续交付的重要性
  • 简洁的一键SSH脚本
  • Page-Enter、Page-Exit的使用
  • 很认真的聊一聊程序员的自我修养(转)
  • ERP系统各种单据流水号的产生方案
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • angular2开源库收集
  • Brief introduction of how to 'Call, Apply and Bind'
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • js操作时间(持续更新)
  • Python实现BT种子转化为磁力链接【实战】
  • React的组件模式
  • React组件设计模式(一)
  • 大型网站性能监测、分析与优化常见问题QA
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 设计模式(12)迭代器模式(讲解+应用)
  • 深入 Nginx 之配置篇
  • 数据科学 第 3 章 11 字符串处理
  • 鱼骨图 - 如何绘制?
  • 主流的CSS水平和垂直居中技术大全
  • #、%和$符号在OGNL表达式中经常出现
  • #1014 : Trie树
  • #大学#套接字
  • (1)常见O(n^2)排序算法解析
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (八)c52学习之旅-中断实验
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)hibernate缓存
  • .dwp和.webpart的区别
  • .Net 4.0并行库实用性演练
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .net2005怎么读string形的xml,不是xml文件。
  • .Net的C#语言取月份数值对应的MonthName值
  • .pyc文件是什么?
  • /proc/stat文件详解(翻译)
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @EnableAsync和@Async开始异步任务支持
  • @Valid和@NotNull字段校验使用
  • []Telit UC864E 拨号上网