ASP.NET回调使用初探
2012-11-16 20:17
274 查看
2012-07-10 14:41
页面的回发是在服务端中重新创建页面以及相应的控件,并且在服务器上运行相应的页面代码,最后将完整的新版本的页面发送回浏览器重新呈现。该方法会导致页面的刷新(重新加载)。整个页面将在服务端和浏览器客户端中往返一次,并且使用ViewState保存数据,网络消耗流量加大。页面的回调则是使用浏览器脚本函数(JS等)向服务端的当前页面类发送相应请求,当前的页面类初始化页面并创建控件和其他相关成员,然后调用特殊方法,执行代码中自定义的操作过程,最后通过另一个方法返回结果给客户端浏览器,浏览器则使用另一个浏览器端的脚本函数读取结果值。此过程中页面保持在浏览器,没有任何刷新过程。实现了AJAX的无刷新效果。前台代码*.aspx
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><title></title><script type="text/javascript">//该方法接收回调服务器端返回的结果数据//这边相当于服务器端的returnValue值,函数名为Page.ClientScript.GetCallbackEventReference()方法的第3个参数//这个函数声明及函数体位于服务器端的Page_Load方法中,通过页面加载时动态添加到客户端脚本function callback(returnValue) {//操作返回结果值alert(returnValue);}//客户端按钮调用事件function ClientCallBack() {//获取客户端数据,var d = document.getElementById("txtName").value;//调用函数传递一个字符串变量,//该变量最终传递到后台的RaiseCallbackEvent()方法参数中CallServer(d);}</script></head><body><form id="form1" runat="server"><div><%-- 该处全部使用HTML客户端控件,不能是服务端控件,如果是服务端控件,则将引发页面的回发 --%><input type="text" id="txtName" /><input type="button" id="btnCallBack" value="callback" onclick="ClientCallBack()" /></div></form></body></html>后台代码:*.aspx.cs
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace RepateruSE{/* HtmlCallBack页面类必须实现ICallbackEventHandler接口,该接口包含以下2个方法:RaiseCallbackEvent()和GetCallbackResult()* RaiseCallbackEvent()参数是从浏览器端传来的,最后将结果用GetCallbackResult()返回浏览器*/public partial class HtmlCallBack : System.Web.UI.Page, ICallbackEventHandler{public string returnValue = null;//存储回调的返回值protected void Page_Load(object sender, EventArgs e){ /* 使用Page.ClientScript.GetCallbackEventReference()可获取浏览器端的脚本函数的引用以下4个参数分别为指定控件(页面对象this)、浏览器端发送的参数(arg) 、* 浏览器端接收结果的函数名称(callback)以及上下文(context)* 最后reference变量保存该引用。*/string reference = Page.ClientScript.GetCallbackEventReference(this, "arg", "callback", "context");//CallServer函数是浏览器端函数,接收1个参数//调用Page.ClientScript.RegisterClientScriptBlock方法将CallServer函数注册到页面对象客户端脚本中Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer","function CallServer(arg,context){ " + reference + "};", true);}//该方法返回回调的结果到客户端上public string GetCallbackResult(){if (writeAll()){returnValue += "true";}elsereturnValue += "false";//返回结果return returnValue;}//该方法是回调的执行方法,可以根据参数处理不同的回调内容public void RaiseCallbackEvent(string eventArgument){returnValue = eventArgument;}//测试服务端执行事件private bool writeAll(){string str = "text";for (int i = 0; i < 10; i++)str += i;System.IO.File.WriteAllText(@"c:\test.txt", str);return true;}}}要完成客户端回调,页面类定义时必须实现ICallbackEventHandler接口,也就是必须实现该接口的两个方法( RaiseCallbackEvent()和GetCallbackResult() )。RaiseCallbackEvent方法用于接收浏览器端脚本函数传递的变量和GetCallbackResult方法返回结果值到另一个浏览器端脚本函数。该方法实现无刷新改变数据和AJAX的不同就是,该方法由ASP.NET提供,不需要用到AJAX框架,也无需手动编写XMLHTTP对象。
相关文章推荐
- 使用asp.net 2.0 客户端回调功能显示后台处理进度
- Coalesys WebMenu for ASP.NET 2.1使用初探
- 一起谈.NET技术,ASP.NET缓存初探 使用得当是关键
- 【ASP.Net】使用ICallbackEventHandler实现无刷新回调
- ASP.NET Web API(一):使用初探,GET和POST数据
- ASP.NET Web API(一):使用初探,GET和POST数据
- Asp.Net 2.0使用ICallbackEventHandler实现无刷新回调
- [ASP.NET 2.0] 六步使用ICallbackEventHandler实现无刷新回调 (转)
- asp.net中回发或回调参数无效。在配置中使用 <pages enableEventValidation="... 问题解决
- ASP.NET with C#使用md5,sha1加密初探
- asp.net 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的
- asp.net中DateTime使用
- ASP.NET中使用Server.Transfer方法在页间传值
- Asp.net使用JQuery实现评论的无刷新分页及分段延迟加载效果
- 在ASP.NET中使用Ajax.dll
- ASP.net 配合AJAX,一般处理程序使用HighChart
- 在asp.net中使用异步同步rss
- ASP.NET MVC 使用总结(二)——扩展HtmlHelper实现动态生成title及meta
- 如何在不影响默认安全性的前提下使用ckeditor+fckeditor+asp.net(C#)?
- Asp.Net中水晶报表的简单使用