在ASP.NET 网页中不经过回发而实现客户端回调
2008-06-12 12:20
441 查看
由于也是初学者,还不知道它和当前ajax之间有什么联系,个人感觉用这种方法就可以实现异步刷新页面了,那为什么还要用到ajax技术了呢?难道客户端回调只属于.net下面特有的,而ajax是无平台区分的么?
下面是我对.net中回调一些理解,难免有些肤浅,希望大家指正。
1.首先要对页面实现ICallbackEventHandler 接口,这主要是让控件可以作为服务器回调事件的目标
一般做法是让页面继承该接口:public partial class calltest :System.Web.UI.Page, System.Web.UI.ICallbackEventHandler { 后台代码 }
2.实现RaiseCallbackEvent和GetCallbackResult方法,其中RaiseCallbackEvent(个人理解:回调函数会自动执行这个事件)用来处理客户端传递过来的变量,GetCallbackResult主要是返回回调的结果。
3.定义一个管理客户端脚本对象ClientScriptManager,这个对象在后面用得上。
4.根据第三步对象,使用它的方法GetCallbackEventReference(),该方法是获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。 这个方法里有几个参数,其中常见的:
control
处理客户端回调的服务器 Control。该控件必须实现 ICallbackEventHandler 接口并提供 RaiseCallbackEvent 方法。
argument
从客户端脚本传递给服务器端的一个参数
RaiseCallbackEvent 方法。
clientCallback
一个客户端事件处理程序的名称,该处理程序接收成功的服务器端事件的结果。
context
启动回调之前在客户端计算的客户端脚本。脚本的结果传回客户端事件处理程序。
5.让后将上面脚本注册到客户端,当客户端响应到注册脚本时,则会调用回调函数,回调函数可以响应操作并返回一些值,这样就可以和客户端进行交互,实现无刷新。
下面是我对.net中回调一些理解,难免有些肤浅,希望大家指正。
1.首先要对页面实现ICallbackEventHandler 接口,这主要是让控件可以作为服务器回调事件的目标
一般做法是让页面继承该接口:public partial class calltest :System.Web.UI.Page, System.Web.UI.ICallbackEventHandler { 后台代码 }
2.实现RaiseCallbackEvent和GetCallbackResult方法,其中RaiseCallbackEvent(个人理解:回调函数会自动执行这个事件)用来处理客户端传递过来的变量,GetCallbackResult主要是返回回调的结果。
3.定义一个管理客户端脚本对象ClientScriptManager,这个对象在后面用得上。
4.根据第三步对象,使用它的方法GetCallbackEventReference(),该方法是获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。 这个方法里有几个参数,其中常见的:
control
处理客户端回调的服务器 Control。该控件必须实现 ICallbackEventHandler 接口并提供 RaiseCallbackEvent 方法。
argument
从客户端脚本传递给服务器端的一个参数
RaiseCallbackEvent 方法。
clientCallback
一个客户端事件处理程序的名称,该处理程序接收成功的服务器端事件的结果。
context
启动回调之前在客户端计算的客户端脚本。脚本的结果传回客户端事件处理程序。
5.让后将上面脚本注册到客户端,当客户端响应到注册脚本时,则会调用回调函数,回调函数可以响应操作并返回一些值,这样就可以和客户端进行交互,实现无刷新。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="call.aspx.cs" Inherits="calltest" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head2" runat="server"> <title>ClientScriptManager Example</title> <script type="text/javascript"> function ProcessCallBackError(arg, context) { Message2.innerText = 'An error has occurred.'; } </script> </head> <body> <form id="Form1" runat="server"> <div> <input type="button" value="ClientCallBack2" onclick="CallTheServer2(value2,'')"/> <br /> <br /> <asp:Label id="MyLabel" runat="server"></asp:Label> <div id="test"></div> </div> </form> </body> </html> using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Net; using System.Text; public partial class calltest :System.Web.UI.Page, System.Web.UI.ICallbackEventHandler { public ArrayList x = new ArrayList(); // Define method that processes the callbacks on server. public void RaiseCallbackEvent(String eventArgument) { x.Add("1"); x.Add("2"); x.Add("1"); x.Add("1"); x.Add("1"); x.Add("2"); x.Add("2"); x.Add("2"); } // Define method that returns callback result. public string GetCallbackResult() { string y; y = "<table border='1px'><tr><td>"; for (int i = 0; i < x.Count; i++) { y += x[i]; y += "</td></tr><tr><td>"; } y += "</td></tr>"; return y ; } protected void Page_Load(object sender, EventArgs e) { // Define a StringBuilder to hold messages to output. StringBuilder sb = new StringBuilder(); // Check if this is a postback. sb.Append("No page postbacks have occurred."); if (Page.IsPostBack) { sb.Append("A page postback has occurred."); } // Write out any messages. MyLabel.Text = sb.ToString(); // Get a ClientScriptManager reference from the Page class. ClientScriptManager cs = Page.ClientScript; String cbReference2 = cs.GetCallbackEventReference("'" + Page.UniqueID + "'", "t", "ReceiveServerData2", "function ReceiveServerData2(t,context){"+ " document.getElementById('test').innerHTML=t;}", "ProcessCallBackError", true); //String cbReference2 = cs.GetCallbackEventReference("'" + // Page.UniqueID + "'", "t", "ReceiveServerData2", "", // "ProcessCallBackError", false); String callbackScript2 = "function CallTheServer2(t, context) {" + cbReference2 + "}"; // Register script blocks will perform call to the server. cs.RegisterClientScriptBlock(this.GetType(), "CallTheServer2", callbackScript2, true); } }
相关文章推荐
- 在 ASP.NET 网页中不经过回发而实现客户端回调
- 在 ASP.NET 网页中不经过回发而实现客户端回调(附Gridview无刷新代码)
- 在 ASP.NET 网页中不经过回发而以编程方式实现客户端回调
- 在 ASP.NET 网页中不经过回发而以编程方式实现客户端回调
- 学习笔记(1)在 ASP.NET 网页中不经过回发而实现客户端回调
- 在 ASP.NET 网页中不经过回发而实现客户端回调(需要实现ICallbackEventHandler接口)
- ASP.NET网页不经过回发实现客户端回调
- 在 ASP.NET 网页中不经过回发而以编程方式实现客户端回调
- 在 ASP.NET 网页中不经过回发而实现客户端回调 [转MSDN]
- ASP.NET 网页中不经过回发而实现客户端回调
- 在 ASP.NET 网页中不经过回发而实现客户端回调(附Gridview无刷新代码)
- ASP.NET 2.0客户端回调的实现分析
- ASP.NET 2.0客户端回调的实现分析
- ASP.NET 2.0客户端回调的实现分析(2)
- [修炼内功]ASP.NET 2.0客户端回调实现无刷新页面
- ASP.NET 2.0客户端回调的实现分析
- ASP.NET 2.0客户端回调的实现分析
- ASP.NET 2.0客户端回调的实现分析
- ASP.NET 2.0客户端回调的实现分析
- ASP.NET 3.5控件和组件开发技术之客户端回发/回调揭密