回调可以在回发的前提下,让客户端执行服务器端代码,从而提高用户体验。
如果一个页面实现回调,那么首先就得实现icallbackeventhandler接口的raisecallbackevent 过程和 getcallbackresult 函数。
raisecallbackevent 处理客户端的请求。
getcallbackresult 将服务器端的处理结果以字符串的形式返回给客服端。
在客服端的定义两个函数:
1.接受服务器端处理结果的接受函数。
2. 向服务器端发出请求的事件驱动函数,事件驱动函数里面必须包含一个在服务端定义的javascript 函数。最后由服务器定义的javascript 函数 去调用 clientscript 的getcallbackeventreference 函数 生成的 javacript 函数。
另外在这里有一个非常重要的对象得说明,clientscript 的getcallbackeventreference 函数,
它是客户端和服务器端的信息使者,也就是说它去驱动服务器的响应,给服务器端提供相关的数据。
下面是详细的是代码:
html 部分:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="test_callback.aspx.vb" Inherits="test_callback" %>
<!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 callservicefunction()
{
var c_c=document.getElementById ("<%=me.listbox1.clientid %>");
var select_value=c_c.options[c_c.selectedIndex].value ;
callserver(select_value);
}
function receiveservicedata(result)
{
var c_c=document.getElementById ("<%=me.label1.clientid %>");
c_c.innerText =result;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ListBox ID="ListBox1" runat="server" Height="243px" Width="86px"></asp:ListBox> <br />
<input id="Button1" style="width: 71px" onclick ="callservicefunction( )" type="button" value="查找" /><br />
<br />
<asp:Label ID="Label1" runat="server" Text="Label" Width="197px"></asp:Label></div>
</form>
</body>
</html>
绑定代码部分:
Imports System.data
Partial Class test_callback
Inherits System.Web.UI.Page
Implements System.Web.UI.ICallbackEventHandler
Dim return_result As String
Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
Return return_result
End Function
Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
return_result = Me.ListBox1.Items(CType(eventArgument, Integer) - 1).Text
End Sub
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
Dim dt As DataTable
Dim dc As DataColumn
Dim dc1 As DataColumn
Dim dr As DataRow
dt = New DataTable
dc = New DataColumn("id")
dc1 = New DataColumn("name")
dt.Columns.Add(dc)
dt.Columns.Add(dc1)
For i As Integer = 0 To 10
dr = dt.NewRow()
dr.Item(0) = i + 1
dr.Item(1) = (i + 1).ToString + "production"
dt.Rows.Add(dr)
Next
Me.ListBox1.DataTextField = "name"
Me.ListBox1.DataValueField = "id"
Me.ListBox1.DataSource = dt
Me.ListBox1.DataBind()
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim callbackscript As String
Dim cbReference As String
cbReference = Page.ClientScript.GetCallbackEventReference(Me, "arg", "receiveservicedata", "context")
callbackscript = " function callserver(arg,context) {" & _
cbReference + " };"
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), _
"callserver", callbackscript, True)
End Sub
End Class