ASP.NET无刷新客户端回调(通过实现ICallbackEventHandler接口)

首先要继承System.Web.UI.ICallbackEventHandler接口

实现public void RaiseCallbackEvent(string eventArg)和 public string GetCallbackResult()方法

流程:

(1)客户端先通过<input type="button" value="测试无刷新客户端回调" οnclick="CallServerFucntion()"/>的单击事件

调用客户端的CallServerFucntion()方法;

(2)CallServerFucntion()方法通过GetCallbackEventReference()方法引发回调,

(3)服务端通过RaiseCallbackEvent()来处理从客户端传来的数据。

(4)处理结果由GetCallbackResult()返回给客户端。

(5)客户端再通过客户端事件ReceiveServerData()来接收由服务端发送来的数据。

 

客户端代码:

 

ContractedBlock.gif ExpandedBlockStart.gif 客户端代码
 1ExpandedBlockStart.gifContractedBlock.gif<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ICallbackEventHandlerTest.aspx.cs" Inherits="WebTest.ICallbackEventHandlerTest" %>
 2
 3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4
 5<html xmlns="http://www.w3.org/1999/xhtml" >
 6<head runat="server">
 7    <title>测试无刷新客户端回调</title>
 8ExpandedBlockStart.gifContractedBlock.gif     <style type="text/css">
 9ExpandedSubBlockStart.gifContractedSubBlock.gif        #t1{}{width: 409px;}
10    
</style>
11ExpandedBlockStart.gifContractedBlock.gif    <script type="text/javascript">
12
13       // 也可以在后台void Page_Load(object sender, EventArgs e)里注册该客户端方法脚本
14       // {
15       //      ClientScriptManager cm = Page.ClientScript;
16       //      String cbReference = cm.GetCallbackEventReference(this, "arg", "ReceiveServerData", null);
17       //      String callbackScript = "function CallServerFucntion() { var arg='客户端数据'; " + cbReference + "; }";
18       //      cm.RegisterStartupScript(this.GetType(),"CallServer", callbackScript, true);
19       // }
20       function CallServerFucntion()
21ExpandedSubBlockStart.gifContractedSubBlock.gif        {
22          var arg="客户端的数据";//传递到服务端可供RaiseCallbackEvent事件处理的数据
23         
24         // ClientScript.GetCallbackEventReference获取一个对客户端函数的引用;
25         // 调用该函数时,将启动一个对服务器事件的客户端回调。
26         // this:处理客户端回调的服务器 Control。
27         // arg:从客户端脚本传递给服务器的一个参数 。
28         // ReceiveServerData:一个客户端事件处理程序的名称,该处理程序接收成功的服务器事件的结果。
29         // null:表启动回调之前在客户端计算的客户端脚本。脚本的结果传回客户端事件处理程序。
30         <%=ClientScript.GetCallbackEventReference(this,"arg","ReceiveServerData",null%>
31        }

32       
33       // ReceiveServerData可以接收、处理服务端传来的数据,serverData是服务端传来的数据。
34       function ReceiveServerData(serverData)
35ExpandedSubBlockStart.gifContractedSubBlock.gif       {
36         document.getElementById("t1").value=serverData;
37       }

38 
</script> 
39</head>
40<body>
41    <form id="form1" runat="server">
42    <div>
43    <input type="text" id="t1"/>
44    <input type="button" value="测试无刷新客户端回调" onclick="CallServerFucntion()"/>
45    </div>
46    </form>
47</body>
48</html>
49
50

 

服务端代码:

 

ContractedBlock.gif ExpandedBlockStart.gif 服务端代码
 1using System;
 2using System.Web;
 3
 4namespace WebTest
 5ExpandedBlockStart.gifContractedBlock.gif{
 6    public partial class ICallbackEventHandlerTest :System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
 7ExpandedSubBlockStart.gifContractedSubBlock.gif    {
 8        protected string result =string.Empty;
 9
10        protected void Page_Load(object sender, EventArgs e)
11ExpandedSubBlockStart.gifContractedSubBlock.gif        {
12            // 当客户端没有写引发回调函数的时候(function CallServerFucntion()方法),可以通过此方法向客户端注入脚本。
13            // ClientScriptManager cm = Page.ClientScript;
14            // String cbReference = cm.GetCallbackEventReference(this, "arg", "ReceiveServerData", null);
15            // String callbackScript = "function CallServerFucntion() { var arg='客户端数据'; " + cbReference + "; }";
16            // cm.RegisterClientScriptBlock(this.GetType(),"CallServer", callbackScript, true);
17        }

18
19ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
20        /// MSDN的解释:处理以控件为目标的回调事件。
21        /// 我的理解:客户端引发该事件,处理完后,数据可以通过GetCallbackResult()返回给客户端
22        /// 这里,通过客户端函数 function ReceiveServerData(serverData) 来接收 result 
23        /// </summary>
24        /// <param name="eventArg">从客户端接收的数据</param>

25        public void RaiseCallbackEvent(string eventArg)
26ExpandedSubBlockStart.gifContractedSubBlock.gif        {
27            string clientData = eventArg;
28
29            result = clientData+ "---服务端处理的数据结果";
30        }

31
32ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
33        /// MSDN的解释:返回以控件为目标的回调事件的结果
34        /// </summary>
35        /// <returns></returns>

36        public string GetCallbackResult()
37ExpandedSubBlockStart.gifContractedSubBlock.gif        {
38            return result;
39        }

40    }

41}

42

 

转载于:https://www.cnblogs.com/_dragon/archive/2009/11/09/1599027.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值