asp.NET中CallBack的回调技术
.NET2.0开始提供了一个新的用于指示控件可以作为服务器的回调事件的目标的接口ICallbackEventHandler,通过这个接口提供的方法,也可以实现页面的局部更新效果。
ICallbackEventHandler主要提供了两个方法:
(1) string GetCallbackResult();
没有参数,返回数据类型为字符串型,返回的内容是回调事件执行的结果。
(2)void RaiseCallbackEvent(string eventArgment);
没有返回值,参数类型是字符串类型,这个参数一般用于客服端和服务器端之间传递的数据参数。
一个控件要局部回调功能,它就必须实现ICallbackEventHandler这个接口,在客户端要获取服务器端GetCallBackResult返回的结果,就需要调用
public string GetCallbackEventReference(Control control,string argument,string clientCallback,string context)
这个方法,其中control表示处理客户端回调的服务器控件,也就是实现了ICallbackEventHandler接口的控件。argument是从客户端传给服务器端方法void RaiseCallbackEvent(string eventArgment)的那个参数。clientCallback是客服端处理程序的名称,该程序处理的的服务器端GetCallbackResult方法返回的字符串。context,启动回调之前在客户端计算的客户端脚本,又称脚本上下文。
下面写一个简单的示例代码,很简单,不做过多说明。
(一)客户端代码
![ContractedBlock.gif](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
<! 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 runat = " server " >
< title > 无标题页 </ title >
< script type = " text/javascript " >
function callbackDo()
{
var resultStr = window.document.getElementById( " Text1 " ).value;
<%= this .ClientScript.GetCallbackEventReference( this , " resultStr " , " getResult " , null ) %>
}
function getResult(dataStr)
{
document.getElementById( " mytext " ).innerHTML = dataStr;
}
</ script >
</ head >
< body >
< form id = " form1 " runat = " server " >
< div >
< div >
< input id = " Text1 " type = " text " /></ div >
< div >< input id = " Button1 " type = " button " value = " button " onclick = " callbackDo() " /></ div >
< div id = " mytext " ></ div >
</ div >
</ form >
</ body >
</ html >
(二)服务器代码
![ContractedBlock.gif](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
{
string resultStr = "" ;
protected void Page_Load( object sender, EventArgs e)
{
}
public void RaiseCallbackEvent( string eventArgument)
{
resultStr = " 从服务器处理后返回了 " + eventArgument;
}
public string GetCallbackResult()
{
return resultStr;
}
}
(三)测试结果
在输入框输入“博客园”,单击按钮button,页面无刷新显示“从服务器处理后返回了博客园”