GetCallbackEventReference的用法(一)

参考网址: http://pwqzc.cnblogs.com/archive/2005/11/10/273277.html
http://mscenter.edu.cn/zhuanti/dianziqikan/13/jssl5.htm

怎样确定将事件绑定到那个脚本函数呢?要靠Page类中的GetCallbackEventReference函数。看这个例子:

string callbackRef = GetCallbackEventReference(this,"document.all['cboEmployees'].value",
"UpdateEmployeeViewHandler", "null", "null");
GetCallbackEventReference

函数的第一个参数制定了服务器端将要处理回调的目标对象。如果传入的是this,则表示页面本身。也可以传入任何实现了ICallbackEventHandler的页面控件(page control)的引用。在任何情况下,客户端的提交动作(submit action)会提交至和标准回传(postback)机制相同的ASPX页面。
第二个参数是一个JavaScript常量表达式,表示传给服务器的输入数据。在上面的代码中,一个下拉列表(dorp-down list)当前选中元素(element)的值被传入。
第三个参数是一个用户定义在<script type=”text/javascript”> 块中的JavaScript回调(callback)函数名。回调(callback)执行后,此函数最终负责页面的更新。最后两个可选参数可用来指定错误处理函数(error handler)和上下文对象(context object)。 第一个:实现了ICallbackEventHandler借口的页面或者服务器控件,写this代表但前页面。 第二个:代表你从要从客户端传递给服务器RaiseCallbackEvent方法的值 第三个:你要在客户端写的一个js函数,同时,服务器也会把计算得到的数据传递给这个函数做为这个函数的参数。 第四个:context具体什么意思我也不太清楚 GetCallbackEventReference函数将产生如下的脚本调用: WebForm_DoCallback(pageID, input, UpdateEmployeeViewHandler, null, null); 此函数的代码会自动下载到客户端并通过<script>标签添加到页面响应(page's response)中。WebForm_DoCallback 使用XmlHttpRequest DOM对象(XmlHttpRequest DOM object)回调(call back)当前页面的URL。与此同时,它会添加一些额外的隐藏域(hidden field)以便服务器区分更简单的轻量级回调(callback)请求和一般回传(postback)请求。 处理请求时,ASP.NET运行时(runtime)标识出调用的目标对象(传给GetCallbackEventReference的第一个参数),确认它实现了ICallbackEventHandler接口后调用RaiseCallbackEvent方法:

	public virtual string RaiseCallbackEvent(string eventArgument)
	{
	// Do something with the input and generate the output
	return ProcessTheCall(eventArgument);
	}
RaiseCallbackEvent的接收参数和返回值均为字符串(string)类型。它也包含任意处理客户端输入并返回响应(response)的代码。客户端和服务器间的数据交换仅能通过字符串(string)进行。一个字符串(string)可包含任何信息,包括序列化的对象(serialized object)。其格式可由你随心所欲指地定。的返回值将被传入客户端的JavaScript回调(callback)函数(前面代码中的UpdateEmployeeViewHandler函数)。这里是其必须的原形(prototype):
	function UpdateEmployeeViewHandler(result, context)
	{
	// "result" is the return value of RaiseCallbackEvent
	// TO DO: Process the string and update the page using DHTML
	}
上面说过,脚本回调(script callback)并不适用于所有浏览器,尽管最新的浏览器,包括Internet Explorer 5+, Netscape 6+, and Safari1.2+都能行。Microsoft在ASP.NET 2.0中加入了两个新的browser bapabilities:SupportsXmlHttp 与SupportsCallback以便开发人员检查方案的可行性。 一条让页面刷新更快的告诫 尽管脚本回调(script callback) 定义在ASP.NET 2.0中,要使其在ASP.NET 1.1里工作也并不很困难。在ASP.NET 2.0中,很多服务器控件(server control)借助脚本回调(script callback)提供了更迅速的页面刷新。最突出的例子也许是GridView控件(GridView control),作为DataGrid的接班人,选择性地运用脚本回调(script callback)实现分页显示记录。 正如前面所说,脚本回调(script callback)依赖于文档对象模型(DOM)的XmlHttpRequest对象。在Internet Explorer中,此文档对象模型对象(DOM object)通过ActiveX控件(ActiveX control)实现——Microsoft.XmlHttp。在IE中浏览这样的页面时,你必须适当降低安全设置以允许ActiveX控件(ActiveX control)能被脚本调用。在其他以同样方式实现XmlHttpRequest文档对象模型对象(DOM object)的浏览器中,这是不必要的。事实上,基于Mozilla的浏览内置支持了HTTP请求功能器,而没用使用ActiveX控件(ActiveX control)——这也是在Internet Explorer 7.0中被寄予厚望的功能。