首先新建一网站项目,并在default.aspx.cs添加
System.Web.UI.ICallbackEventHandler接口。
再为整个页面类添加如下函数:
public void RaiseCallbackEvent(string eventArgument)
{
}
个人理解:在服务器处理前可以对客户端传递参数进行判断处理。
public string GetCallbackResult()
{
}
个人理解:服务器端处理函数
备注:实现 ICallbackEventHandler 接口的控件的示例包括 GridView、DetailsView 和 TreeView 控件。当回调事件以实现了 ICallbackEventHandler 接口的控件为目标时,将把事件变量作为参数传递来调用 RaiseCallbackEvent方法以处理该事件,并且 GetCallbackResult方法返回回调的结果。
发送回调函数:
String
cbReference =Page.ClientScript.GetCallbackEventReference(this, "arg",
"ReceiveServerData", "context");
ReceiveServerData
为客户端回调函数
function
ReceiveServerData(rvalue, context)
{
document.getElementById("main").innerText = "Return value = "+rvalue;//
显示
}
个人理解:arg为客户端传向服务器端参数,而context为客户端回传客户端参数,在服务器端不进行变化
将上面封装成事件函数:
String
callbackScript = "function CallServer(arg, context) {" +
cbReference + "; }";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
"CallServer", callbackScript, true);
将函数赋给控件:
this
.Button1.Attributes.Add("onclick", "CallServer('','')");
操作实例:
以下实例源码提供:
Default.asp
<%
@
Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!
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>CallBack
机制</title>
<script type="text/javascript">
function
ReceiveServerData(rvalue,context)
{
if
(context=="1")
{
document.getElementById("main").innerText = "Return value = "+rvalue+context;
}
else
{
document.getElementById("main1").innerText = "Return = "+rvalue+context;
}
}
</
script
>
</
head
>
<
body
>
<form id="form1" runat="server">
<div>
<input id="Button1" type="button" value="
加—"
runat="server"/>
<input id="Button2" type="button" value="
加—>>"
runat="server"/></div>
<div id="main">ss</div>
<div id="main1">ss</div>
</form>
</
body
>
</
html
>
Default.aspx.cs
using
System;
using
System.Data;
using
System.Configuration;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
public
partial class _Default : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
{
protected void Page_Load(object sender, EventArgs e)
{
String cbReference =Page.ClientScript.GetCallbackEventReference(this, "arg",
"ReceiveServerData", "context");
String callbackScript = "function CallServer(arg, context) {" +
cbReference + "; }";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
"CallServer", callbackScript, true);
this.Button1.Attributes.Add("onclick", "CallServer('1','1')");
this.Button2.Attributes.Add("onclick", "CallServer('2','2')");
}
string returnValue;
public void RaiseCallbackEvent(string eventArgument)
{
if (eventArgument == "2")
{
returnValue = ">>";
}
}
public string GetCallbackResult()
{
string str = "";
int k = 0;
for (int i = 1; i < 10; i++)
{
k= i * 2;
str += k.ToString()+"
—"
+returnValue;
}
return str;
}
}