在客户端回调中,客户端脚本函数会向 ASP.NET 网页发送请求,该网页随后会运行其正常生命周期的简化版本以处理该回调。若要确保回调事件源于预期的用户界面 (UI),可以对回调进行验证。在回调验证中,应先在网页呈现过程中注册要验证的事件,然后在回调过程中对该事件进行验证。有关回调的概述,请参见在 ASP.NET 网页中不经过回发而实现客户端回调。
实现 ICallBackEventHandler 接口
-
对于单文件页或用户控件,可使用该页中的 @ Implements 指令实现 ICallbackEventHandler 接口,如下面的示例所示。
Visual Basic<%@ Page Language="VB" %> <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
C#<%@ Page Language="C#" %> <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
注意 如果使用的是代码隐藏页模型,则可以实现分部类的 ICallbackEventHandler 接口。
-
实现 ICallbackEventHandler 接口的 RaiseCallbackEvent 方法。RaiseCallbackEvent 方法采用表示事件参数的单个参数,如下面的示例所示。
Visual BasicPublic Sub RaiseCallbackEvent(ByVal eventArgument As String) _ Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent End Sub
C#public void RaiseCallbackEvent(String eventArgument) { }
-
实现 ICallbackEventHandler 接口的 GetCallbackResult 方法。GetCallbackResult 方法不使用任何参数,它将返回一个表示回调结果的字符串。在下面的示例中,将返回一个名为 returnValue 的字符串。
Visual BasicPublic Function GetCallbackResult() _ As String Implements _ System.Web.UI.ICallbackEventHandler.GetCallbackResult Return returnValue End Function
C#public String GetCallbackResult() { return returnValue; }
注册回调以进行事件验证
-
重写 Page 类的 Render 方法,并使用 ClientScriptManager 类的 RegisterForEventValidation 方法注册要验证的事件。可以使用 Page 类的 ClientScript 属性获取对 ClientScriptManager 类的引用。在下面的示例中,将注册一个名为 Callback1 的回调以进行事件验证。
Visual BasicProtected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) Page.ClientScript.RegisterForEventValidation("ClientCallback1") MyBase.Render(writer) End Sub
C#protected override void Render(HtmlTextWriter writer) { Page.ClientScript.RegisterForEventValidation("ClientCallback1"); base.Render(writer); }
验证回调并返回回调结果
-
在 RaiseCallbackEvent 方法中,使用 ClientScriptManager 类的 ValidateEvent 方法来验证事件。使用的方法签名应与在注册要验证的事件时使用的方法签名相同。在下面的示例中,使用的是采用一个参数的方法签名。
Visual BasicPublic Sub RaiseCallbackEvent(ByVal eventArgument As String) _ Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent Try Page.ClientScript.ValidateEvent("ClientCallback1") ' Callback logic goes here. returnValue = "callback result" Catch ' Failed callback validation logic. End Try End Sub
C#public void RaiseCallbackEvent(String eventArgument) { try { Page.ClientScript.ValidateEvent("ClientCallback1"); // Callback logic goes here. returnValue = "callback result"; } catch { // Failed callback validation logic. } }
如果验证通过,则代码将继续使用回调事件逻辑。在 RaiseCallbackEvent 方法完成后,将调用 GetCallbackResult 方法,以便将回调结果以字符串的形式返回给客户端脚本函数。
有关创建和实现客户端脚本函数以支持客户端回调的更多信息,请参见在 ASP.NET 网页中不经过回发而实现客户端回调和具有验证实现的客户端回调示例。