关于ICallbackEventHandler的疑问
生活随笔
收集整理的這篇文章主要介紹了
关于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 網站類型)?
下面是代碼 :
?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的疑问的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 仿淘宝首页图片切换
- 下一篇: Enumerable#zip特性