您的位置:首页 > 编程语言 > ASP

如何:在 ASP.NET 网页中实现回调

2010-05-08 23:50 344 查看
如何:在 ASP.NET 网页中实现回调



在客户端回调中,客户端脚本函数会向 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 Basic
复制代码

Public 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 Basic
复制代码

Public 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 Basic
复制代码

Protected 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 Basic
复制代码

Public 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 网页中不经过回发而实现客户端回调具有验证实现的客户端回调示例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: