近日,由于需要,我写了一个webcontrol,并在实现了ICallbackEventHandler,目的是根据传进来的参数进行逻辑处理,然后返回值。

我下面的例子目的是从1到5调用异步函数,然后在回调函数将1到5这几个数值相加。但是,由于调用异步函数的过程没有被阻塞,因此值一直为0.

特别注意:我在使用this.Page.ClientScript.GetCallbackEventReference(this, "argument", "callbackFunc", "context",false)的时候,最后一个参数的true或false都测试过(也就是同步异步都不行)。

由于比较急,且个人弄了很久,没个头绪,因此斗胆发到首页来,请各位高人们帮忙参谋参谋。。。拜谢先。

猛击这里下载源码->/Files/McJeremy/AjaxCountTest.rar

源码是用vs2005+sp1创建的(ASP.NET 网站类型)

下面是代码 :

 1 namespace Test
 2 {
 3     /// <summary>
 4     /// AjaxControl 的摘要说明
 5     /// </summary>
 6     public class AjaxControl : WebControl, ICallbackEventHandler
 7     {
 8         public AjaxControl()
 9         {
10         }
11 
12         protected override void Render(HtmlTextWriter writer)
13         {
14             writer.Write("Test tttt");
15             writer.Write(GetAjaxFunction());
16         }
17        //生成异步函数
18         private string GetAjaxFunction()
19         {
20             System.Text.StringBuilder sb = new System.Text.StringBuilder();
21             sb.Append("<script type=\"text/javascript\">");
22             sb.Append("function callServer(argument,context){");
23             sb.Append(this.Page.ClientScript.GetCallbackEventReference(this, "argument", "callbackFunc", "context",false));
24             sb.Append("}</script>");
25             return sb.ToString();
26         }
27 
28         #region ICallbackEventHandler 成员
29 
30         private string rValue;
31 
32         public string GetCallbackResult()
33         {
34             return rValue;
35         }
36 
37         public void RaiseCallbackEvent(string eventArgument)
38         {
39             //此处不作处理,直接返回
40             rValue = eventArgument;
41         }
42 
43         #endregion
44     }
45 }

JS文件

 1 var envir={count:0};
 2 function callbackFunc(data,context)
 3 {
 4    envir.count+=parseInt(data,10);
 5 }
 6 
 7 window.onload=function()
 8 {
 9    //循环调用异步函数
10     for(var i=1;i<5;i++)
11     {
12         callServer(i,'');
13     }
14         
15         //此处不等callServer执行完成后,就执行了。导致envir.count为0
16         //而按设想,envir.count的值应该是1+2+3+4 = 10
17     alert(envir.count);
18 }

最终调用的default.aspx:

 1 <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
 2 
 3 <%@ Register Assembly="ClassLibrary" Namespace="Test" TagPrefix="cc1" %>
 4 
 5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 6 
 7 <html xmlns="http://www.w3.org/1999/xhtml" >
 8 <head runat="server">
 9     <title>无标题页</title>
10     <script type="text/javascript" src="JScript.js">
11     
12     </script>
13 </head>
14 <body>
15     <form id="form1" runat="server">
16     <div>
17         <cc1:AjaxControl ID="AjaxControl1" runat="server" />       
18     </div>
19     </form>
20 </body>
21 </html>
22 

转载于:https://www.cnblogs.com/McJeremy/archive/2010/06/18/1759920.html

关于ICallbackEventHandler的疑问相关推荐

  1. 读阮一峰对《javascript语言精粹》的笔记,我有疑问。

    <javascript语言精粹>是一本很棒的书籍,其中作者在附录列出了12种他所认为的javascript语言中的糟粕. 我最近开始跟读前端前辈的博客,其中读到了阮一峰的<12种不宜 ...

  2. 六步使用ICallbackEventHandler实现无刷新回调

    AJAX技术所提倡的无刷新回调,在原来的技术中需要写大量的JavaScript代码或使用一些AJAX框架,使得开发效率和可维护性大大降低.其实ASP.NET2.0中,已经提供了这样的接口,这就是ICa ...

  3. 有关包络Spectral Envelope的疑问

    在有关MFCC的许多文章中,很多都是引用国外一篇PPT的. 这篇地址在这里 其中有关于Spectral Envelope(包络)的理解我一直有一些疑问. 疑问 为什么有如下假定? Spectrum = ...

  4. 自动驾驶真的会来得那么快吗:关于自动驾驶的7个疑问

    来源:资本实验室 自动驾驶汽车的研发已经成为全球热潮.无论是像谷歌.百度.Uber这样的互联网巨头,还是丰田.通用.福特这样的老牌汽车制造商,都在以大量的人力.资金向自动驾驶领域下注. 然而,无论是W ...

  5. 关于dns域名轮询监控的疑问

    网上有这样一句话: 目前DNS支持一个域名对应多个IP的解析,优势是可以起到负载均衡的作用,最大的问题是目标主机不可用时无法自动剔除,因此必须在自己的业务端写好监控与发现,怎么样来做这样的监控,以py ...

  6. 用户利益何在:微软Windows10新政背后的疑问

    日前,微软宣布,以后新的CPU(英特尔Kaby lake,AMD Bristol Ridge和高通骁龙820)只会支持Windows 10,不再支持老的系统.此外,不但新的CPU成了Windows 1 ...

  7. 线程池的一些疑问和解答

    2019独角兽企业重金招聘Python工程师标准>>> 疑问 线程池中的线程是如何实现一个线程执行多个任务的? 构造线程池时为何要用阻塞队列作为参数,非阻塞队列不行吗? 线程池的几个 ...

  8. 回应关于《BCH五月硬分叉是伪需求》的疑问

    其实之前那篇文章的重点在于探讨增加OP_RETURN 字段长度并添加相关脚本命令的意义,在下的观点是完全没有意义.不过评论区来的大多数BCH粉丝们似乎并不能理解什么是脚本命令,只会一遍一遍地喊口号.因 ...

  9. cygwin和mingw编译软件的疑问

    2019独角兽企业重金招聘Python工程师标准>>> 对于cygwin和mingw的区别已有基本了解.先已有mingw+msys环境,mingw版gcc在mingw官网下载,版本4 ...

最新文章

  1. 大数据实战之环境搭建(七)
  2. 击败安全系统系列文章之突破卡巴6
  3. MySql cmd下的学习笔记 —— 有关select的操作(max, min等常见函数)
  4. Rxjs takeWhile 和 filter 操作符的区别
  5. 更改用户密码oracle,oracle数据库更改用户密码
  6. 调试 ASP.NET Core 2.0 源代码
  7. MFC操作多个安卓设备(发送指令)
  8. Spring配置补充
  9. 玉柴spn码故障对照表_故障代码一览表
  10. STC - 非标连接的7段数码管赋值
  11. 魏尔斯特拉斯---严谨的典范
  12. 职场解释系:张三丰的接班人计划
  13. PCU-285锡膏粘度计优点及特点
  14. c++ 光标移动定位
  15. 【FTP】错误描述:200 Switching to ASCII mode,227 Entering Passive Mode
  16. 边境的悍匪—机器学习实战:第一章 机器学习的基础知识
  17. OA协同办公系统-day01
  18. 水果食用大全 -- 果品食疗 - 葡萄
  19. Go语言和php个和lua,当 Go 遇上了 Lua
  20. Java程序中如何输入数据

热门文章

  1. Counting Bits
  2. WinCE电源管理的简单介绍
  3. PIC32单片机harmony开发环境 - i2c例程和代码分析
  4. 人机接口要学哪些计算机语言,智能人机接口
  5. python3 for_Python3: for 表达式
  6. Unity SRP自定义渲染管线 -- 2.Custom Shaders
  7. 机器学习之 weka学习(二)算法说明
  8. 【网络安全】关于ARP攻击的原理以及在Kali Linux环境下的实现
  9. UWP_小说在线阅读器:功能要求与技术要求
  10. Visual Studio for Mac Preview离线下载安装