采用在服务端注册脚本的方式实现。由于在安装自带的MSDN里的实例有误,因此在网上搜索了很多的实例来完成。但网上的资料大多是基于C#的。
实现的功能:在一个文本框里输入数据,然后通过点击按钮,把输入的数据显示在另一个文本框里。
前台HTML:
< input onclick = " callToServer(); " type = " button " value = " Call to Server " /> <!-- 在按钮的onclick事件里激发回调事件 -->
result: < input id = " txtResult " /><!-- 显示结果的文本框 -->
JS脚本:
function callToServer() ... {//激发回调函数
var param=document.getElementById("txtMessage").value;
var context="";
CallTheServer(param,context);//在此处调用服务端注册的函数
}
function rr(result,context) ... {//回调结果处理函数
document.getElementById("txtResult").value=result;
}
</ script >
后台aspx.vb文件的书写:
首先引用ICallbackEventHandler接口:在Inherits System.Web.UI.Page后面添加:
Implements System.Web.UI.ICallbackEventHandler
需要实现此接口的一个函数与一个方法(这里跟MSDN里不一样):
Public Function GetCallbackResult()Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
其中RaiseCallbackEvent过程里的参数eventArgument就是CallTheServer里的第一个参数.此过程的作用是接收客户端的请求回调时所传递的参数。
GetCallbackResult过程是向客户端接收回调的JS函数发送回调的结果。
另外,在page_load里添加对JS脚本CallTheServer的注册以后及回调事件的参数引用。
Dim callbackScript = " function CallTheServer(param,context) " + " { " + cb + " }; "
Page.ClientScript.RegisterStartupScript( Me .GetType, " abcd " , callbackScript, True )
其中第一句是GetCallbackEventReference函数。第一个参数为客户端回调服务器的控件,一般情况下都为本页面(VB:me,C#:this),第二个参数是CallTheServer函数里的参数,第三个参数为接收回调结果的函数名,这里为RR,第四个参数好像没什么用,不过一般都用CallTheServer里传递的第二个参数。
第二句为生成要注册的客户端调用的JS函数CallTheServer,参数跟在前台的JS里书写的一致。此函数的内容为上一句参数引用的脚本。经过第三句注册后实际发送到客户端的代码为:WebForm_InitCallback();function CallTheServer(param,context){WebForm_DoCallback('__Page',param,rr,context,null,false)};
第三句为注册此脚本,利用RegisterStartupScript方法。其中第一个参数为固定的。第二个参数提示的是要注册脚本启动的键。猜想应该是一个唯一识别的关键字,随便写了。第三个是要注册的脚本的内容,就是上一句生成的JS函数了。最后一个参数为true就启用自动添加<script type="text/javascript">标识,当然要加了,因为前面的callbackScript字符串里并没有这个标识。
完整代码:
前台HTML:
<! 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 language ="javascript" type ="text/javascript" > ...
function callToServer()...{
var param=document.getElementById("txtMessage").value;
var context="";
CallTheServer(param,context);
}
function rr(result,context)...{
document.getElementById("txtResult").value=result;
}
</ script >
</ head >
< body >
< form id ="Form1" method ="post" runat ="server" >
< input id ="txtMessage" />
< input onclick ="callToServer();" type ="button" value ="Call to Server" />
result: < input id ="txtResult" />
</ form >
</ body >
</ html >
后台.vb文件的内容:
Inherits System.Web.UI.Page
Implements System.Web.UI.ICallbackEventHandler
Dim ClientScript As String
Public Sub RaiseCallbackEvent()Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
ClientScript = eventArgument
End Sub
Public Function GetCallbackResult()Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
Return ClientScript
End Function
Protected Sub Page_Load()Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim cb As String = Page.ClientScript.GetCallbackEventReference(Me, "param", "rr", "context")
Dim callbackScript = "function CallTheServer(param,context)" + "{" + cb + "};"
Page.ClientScript.RegisterStartupScript(Me.GetType, "abcd", callbackScript, True)
End Sub
End Class