使用ICallbackEventHandler实现无刷新回调
2010-10-13 10:55
375 查看
實例參考OAY Report
'---------------------------
服務端(.cs):
客戶端(.aspx):
'---------------------------
AJAX技术所提倡的无刷新回调,在原来的技术中需要写大量的javascript代码或使用一些AJAX框架,使得开发效率和可维护性大大降低。其实ASP.NET2.0中,已经提供了这样的接口,这就是ICallbackEventHandler。
关于ICallbackEventHandler网上已经有很多文章介绍了,这篇实为画蛇添足。
ICallbackEventHandler存在于System.Web.UI中,我们先做一个非常简单的例子来试用一下。
第一步,在VS2005中建立一个新的WEB窗件。
第二步,在ASPX中,放上一段HTML代码(如下):
<body>
<form id="form1" runat="server">
<div>
<button onclick="CallServer()">CallServer</button>
</div>
</form>
</body>
第三步,然后在<HEAD></HEAD>中放入一段JavaScript脚本:
<script type="text/javascript">
function CallServer()
{
var prodUCt = "测试";
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
}
function ReceiveServerData(rValue)
{
alert(rValue);
}
</script>
第四步,在此ASPX的后台CS代码中,继承ICallbackEventHandler接口,并实现接口中的两个方法:
ICallbackEventHandler.GetCallbackResult()
和
ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
第五步,增加一个变量CallBackValue,并修改接口的两个方法为:
private string CallBackValue = string.Empty;
string ICallbackEventHandler.GetCallbackResult()
{
return CallBackValue + ",ok";
}
void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
{
this.CallBackValue = eventArgument;
}
第六步,运行,界面上会出现一个按钮,点击后,会将“测试”这个字符串传至后台,后台C#代码将字符串加上“,OK”后返回给客户端的JavaScript代码,并显示。
以上六步,就可以实现无刷新回调了。现在,我们来分析一下几段代码。
先看第三步中的JavaScript代码,其中的CallServer()方法中进行了回调,回调的语句为:
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
里面四个参数中第二个参数指定将product这个JavaScript中的字符串变量传回后台,第三个参数指定了从后台返回时接收返回信息的JavaScript方法ReceiveServerData(string Value)。
第五步中后台的两个方法,一个ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)用来接收前台JavaScript中传来的字符串变量,并赋值给内部变量this.CallBackValue,另一个方法ICallbackEventHandler.GetCallbackResult()将变更后的内部变量this.CallBackValue返回给前台JavaScript方法ReceiveServerData(string Value)。
调用的顺序是: (前台)CallServer() --> (后台)ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) --> (后台)ICallbackEventHandler.GetCallbackResult() --> (前台)ReceiveServerData(string Value)。
整个调用过程非常简单,而其中非常关键的一步是第三步的<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
这个方法,以下是从网上找来的一段资料,大家可以看看。
GetCallbackEventReference使得客户端方法在客户端请求结束时得到回收。 它也让CallBackManager 确定产生哪种回叫方法。 在这个例子内使用的被重载的方法是:
public string GetCallbackEventReference(
string target, string argument,
string clientCallback, string context,
string clientErrorCallback)
从这个方法返回的string是:
__doCallback('__Page',arg,CallBackHandler,ctx, ErrorCallBack)
另一个重载方法是:
public string GetCallbackEventReference(
Control control, string argument,
string clientCallback, string context)
public string GetCallbackEventReference(
Control control, string argument,
string clientCallback, string context,
string clientErrorCallback)
'---------------------------
服務端(.cs):
public string ReturnArg = string.Empty; protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); RegisterClientJS(); } protected void RegisterClientJS() { ClientScriptManager cs = Page.ClientScript; string jscript = @" function CallTheServer(csArg) {" + cs.GetCallbackEventReference(this, "csArg", "ReceiveServerData", null)+";}"; cs.RegisterStartupScript(this.GetType(), "calltheserver", jscript, true); } string ICallbackEventHandler.GetCallbackResult() { return ReturnArg.ToString();//把服务器名字与客户端传递来的参数一起回传给客户端 } void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) { string products=eventArgument.Split('|').GetValue(0).ToString(); string Area=eventArgument.Split('|').GetValue(1).ToString(); this.ReturnArg = pde.GetProsSteps(products, Area); //可读取数据库中数据,将所需值赋给回传参数ReturnArg }
客戶端(.aspx):
function ReceiveServerData(backArg) { steps = backArg.split(','); var step = document.getElementById("dptStep"); for (var j = 0; j < steps.length; j++) { step.options.add(new Option(steps[j], steps[j])); } if (step.length > 0) { step.options.add(new Option("*", "*"));} } //调用服务器在客户端注册的函数,将客户端数据传递给服务器 function CallServer_Arg(fun) { CallTheServer(fun); }
'---------------------------
AJAX技术所提倡的无刷新回调,在原来的技术中需要写大量的javascript代码或使用一些AJAX框架,使得开发效率和可维护性大大降低。其实ASP.NET2.0中,已经提供了这样的接口,这就是ICallbackEventHandler。
关于ICallbackEventHandler网上已经有很多文章介绍了,这篇实为画蛇添足。
ICallbackEventHandler存在于System.Web.UI中,我们先做一个非常简单的例子来试用一下。
第一步,在VS2005中建立一个新的WEB窗件。
第二步,在ASPX中,放上一段HTML代码(如下):
<body>
<form id="form1" runat="server">
<div>
<button onclick="CallServer()">CallServer</button>
</div>
</form>
</body>
第三步,然后在<HEAD></HEAD>中放入一段JavaScript脚本:
<script type="text/javascript">
function CallServer()
{
var prodUCt = "测试";
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
}
function ReceiveServerData(rValue)
{
alert(rValue);
}
</script>
第四步,在此ASPX的后台CS代码中,继承ICallbackEventHandler接口,并实现接口中的两个方法:
ICallbackEventHandler.GetCallbackResult()
和
ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
第五步,增加一个变量CallBackValue,并修改接口的两个方法为:
private string CallBackValue = string.Empty;
string ICallbackEventHandler.GetCallbackResult()
{
return CallBackValue + ",ok";
}
void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
{
this.CallBackValue = eventArgument;
}
第六步,运行,界面上会出现一个按钮,点击后,会将“测试”这个字符串传至后台,后台C#代码将字符串加上“,OK”后返回给客户端的JavaScript代码,并显示。
以上六步,就可以实现无刷新回调了。现在,我们来分析一下几段代码。
先看第三步中的JavaScript代码,其中的CallServer()方法中进行了回调,回调的语句为:
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
里面四个参数中第二个参数指定将product这个JavaScript中的字符串变量传回后台,第三个参数指定了从后台返回时接收返回信息的JavaScript方法ReceiveServerData(string Value)。
第五步中后台的两个方法,一个ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)用来接收前台JavaScript中传来的字符串变量,并赋值给内部变量this.CallBackValue,另一个方法ICallbackEventHandler.GetCallbackResult()将变更后的内部变量this.CallBackValue返回给前台JavaScript方法ReceiveServerData(string Value)。
调用的顺序是: (前台)CallServer() --> (后台)ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) --> (后台)ICallbackEventHandler.GetCallbackResult() --> (前台)ReceiveServerData(string Value)。
整个调用过程非常简单,而其中非常关键的一步是第三步的<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
这个方法,以下是从网上找来的一段资料,大家可以看看。
GetCallbackEventReference使得客户端方法在客户端请求结束时得到回收。 它也让CallBackManager 确定产生哪种回叫方法。 在这个例子内使用的被重载的方法是:
public string GetCallbackEventReference(
string target, string argument,
string clientCallback, string context,
string clientErrorCallback)
从这个方法返回的string是:
__doCallback('__Page',arg,CallBackHandler,ctx, ErrorCallBack)
另一个重载方法是:
public string GetCallbackEventReference(
Control control, string argument,
string clientCallback, string context)
public string GetCallbackEventReference(
Control control, string argument,
string clientCallback, string context,
string clientErrorCallback)
相关文章推荐
- 【ASP.Net】使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 六步使用ICallbackEventHandler实现无刷新回调
- 使用ICallbackEventHandler实现无刷新回调