错误是:未能找到回调的目标“__Page”或未实现ICallbackEventHandler

本文详细介绍了ASP.NET中使用ClientScriptManager.GetCallbackEventReference方法实现客户端回调的技术细节,包括实现步骤、注意事项及示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ClientScriptManager.GetCallbackEventReference方法(Control,String,String,String)

注意:此方法在.NETFramework2.0版中是新增的。

获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。此重载方法的客户端函数包含指定的控件、参数、客户端脚本和上下文。

命名空间:System.Web.UI
程序集:System.Web(在system.web.dll中)

publicstringGetCallbackEventReference(Controlcontrol,stringargument,stringclientCallback,stringcontext)参数

control

处理客户端回调的服务器Control。该控件必须实现ICallbackEventHandler接口并提供RaiseCallbackEvent方法。

argument

从客户端脚本传递给服务器端的一个参数

RaiseCallbackEvent方法。

clientCallback

一个客户端事件处理程序的名称,该处理程序接收成功的服务器端事件的结果。

context

启动回调之前在客户端计算的客户端脚本。脚本的结果传回客户端事件处理程序。

 

 

返回值调用客户端回调的客户端函数的名称。异常类型条件  

ArgumentNullException

 

指定的Control为空引用(在VisualBasic中为Nothing)。

 

InvalidOperationException

 

指定的Control未实现ICallbackEventHandler接口。

GetCallbackEventReference(Control,String,String,String)方法对服务器执行带外回调,这是对网页正常生命周期的修改。

 

有关更多信息,请参见在ASP.NET网页中不经过回发而实现客户端回调。

 

GetCallbackEventReference方法的 GetCallbackEventReference重载使用XMLoverHTTP同步执行回调。当在回调情况

 

下同步发送数据时,同步回调会立即返回,不会阻塞浏览器。在浏览器中不能同时执行两个同步回调。假如第二个同步回调是在第一个当

 

前挂起时激发的,则第二个同步回调会取消第一个,并只返回第二个回调。

 

若要异步发送数据,请使用接受 useAsync参数(它是控制此行为的布尔值)的某个重载。在异步情况下,您可以有多个挂起的回调;

 

然而,无法保证它们的返回顺序与启动顺序一致。

 

另外, GetCallbackEventReference方法的此重载未指定用来处理 RaiseCallbackEvent方法所生成错误的客户端函数。若要指

 

定客户端错误回调处理程序,请使用接受 clientErrorCallback参数的某个重载。

 

GetCallbackEventReference(Control,String,String,String)方法接受一个可选的 argument字符串参数并返回一个字符串。

 

若要传入或接收多个值,请分别在输入字符串或返回字符串中将这些值串连起来。

 

 

注重:

 

使用Callback,只需要做以下4步:

 

1、在你的页面中继续System.Web.UI.ICallbackEventHandler接口。//一定要继承这个接口

 

 

publicpartialclass_Default:System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
{
protectedvoidPage_Load(objectsender,EventArgse)
{
}
#regionICallbackEventHandlerMembers
publicstringGetCallbackResult()
{
}
publicvoidRaiseCallbackEvent(stringeventArgument)
{
}
}

 

 

假如你没有使用code-behind,那你也可以在aspx页面顶部加入下面的代码:

 

 

<@ImplementsInterface="System.Web.UI.ICallbackEventHandler">

 

 

2、在前台写一段自定义的javascript,更新页面

 

 

这一段javascript用来更新页面的某个局部,就像你平常操作的一样,写些

 

document.getElementById("xxx").innerHTML="workingonyourrequest...."。

 

 

<scripttype="text/javascript">
functionGetFlag(arg)//这里已经得到服务器端数据据了,服务器端数据就在这个参数arg里。
{
document.getElementById("result").innerHTML=arg;//我们不作处理,直接显示在页面上。
}
</script>

 

 

你可能有些迷糊,就得到了吗?连个什么XMLHttpRequest都没有哩……

 

 

3、在Page_Load中再注册一段javascript

 

 

stringscript=Page.ClientScript.GetCallbackEventReference(this,"arg","GetFlag","");
Page.ClientScript.RegisterClientScriptBlock(this.GetType(),.......//省略了一大串

 

 

上面的GetCallbackEventReference是用来得到客户端函数的引用,发起一个callback到服务器端的,你不必知

 

道具体内容。

 

 

你只需要了解:

 

 

  • 第一个参数填this,用来handle客户端的callback的,它必须继续ICallbackEventHandler接口并提供
  • RaiseCallbackEvent方法,我们已经在继续了这个接口,上面第一点中的代码也有RaiseCallbackEvent
  • 方法,只是还没有具体写内容呢。
  • 第二个参数就是那个从客户端传到服务器端的参数。假如你想要注册的检查用户是否可用,那么这里的值就
  • 是用户输的那个值。
  • 第三个参数是前台的javascript函数名,在第二步中我们写的名字是:GetFlag。当数据好了,这个
  • javascript函数就会用到。
  • 第四个参数一般用不上。

 

返回值:一个函数的名字,是客户端调用的函数名。这个函数会调用到服务器端了。

 

4、调用你的函数。

<inputtype="button"value="checkit!"οnclick="callServer()"/>

 

上面一定是οnclick="callServer()"吗?呵呵,这要看你了,你在Page.ClientScript.

RegisterClientScriptBlock注册的什么javascript函数名字,就是什么名字了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值