vb.net2005中回调功能的简单实现

本文介绍了一种使用ASP.NET实现客户端与服务器端回调的方法。通过在服务端注册脚本,实现从前台输入数据,点击按钮后将数据显示在另一文本框中。涉及的技术包括HTML、JavaScript和VB.NET。

采用在服务端注册脚本的方式实现。由于在安装自带的MSDN里的实例有误,因此在网上搜索了很多的实例来完成。但网上的资料大多是基于C#的。
实现的功能:在一个文本框里输入数据,然后通过点击按钮,把输入的数据显示在另一个文本框里。

前台HTML:
  

<input id="txtMessage" /> <!--输入文本框,需要设置ID-->
        
<input onclick="callToServer();" type="button" value="Call to Server" /> <!--在按钮的onclick事件里激发回调事件-->
        result:
<input id="txtResult" /><!--显示结果的文本框-->

JS脚本:

<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>

 

后台aspx.vb文件的书写:
首先引用ICallbackEventHandler接口:在Inherits System.Web.UI.Page后面添加:
  Implements System.Web.UI.ICallbackEventHandler
需要实现此接口的一个函数与一个方法(这里跟MSDN里不一样):

Public Sub RaiseCallbackEvent(ByVal eventArgument As StringImplements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
其中RaiseCallbackEvent过程里的参数eventArgument就是CallTheServer里的第一个参数.此过程的作用是接收客户端的请求回调时所传递的参数。
GetCallbackResult过程是向客户端接收回调的JS函数发送回调的结果。

 

另外,在page_load里添加对JS脚本CallTheServer的注册以后及回调事件的参数引用。
 

   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)

其中第一句是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:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default1.aspx.vb" Inherits="aspx_Default1" %>

<!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文件的内容:

Partial Class aspx_Default1
  
Inherits System.Web.UI.Page
  
Implements System.Web.UI.ICallbackEventHandler

  
Dim ClientScript As String
  
Public Sub RaiseCallbackEvent(ByVal eventArgument As StringImplements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
    ClientScript 
= eventArgument
  
End Sub


  
Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
    
Return ClientScript
  
End Function


  
Protected Sub Page_Load(ByVal sender As ObjectByVal 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
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值