• 关于ICallbackEventHandler的疑问


    近日,由于需要,我写了一个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 
    <h3>
       心静似高山流水不动,心清若巫峰雾气不沾。
    </h3>
  • 相关阅读:
    vue-router在两个以上子路由的情况下,跳转出错
    全局window下添加可变量
    nuxtjs 环境中添加全局axios
    nuxt.js 初始化 npm run dev 报错
    replace的回调函数。
    JS面向对象的类 实例化与继承
    DOM事件: DOM事件级别、DOM事件流、DOM事件模型、DOM事件捕获过程、自定义事件
    sync 简单实现 父子组件的双向绑定
    cube-ui 重构饿了吗Webapp的 scroll-nav域名插槽问题
    在element table中导出指定列信息
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1759920.html
Copyright © 2020-2023  润新知