HOW TO:在 ASP.NET Web 網頁中實作回呼
更新:2007 年 11 月
在用戶端回呼 (Callback) 中,用戶端指令碼函式會傳送要求給 ASP.NET Web 網頁,而這個網頁會接著執行其正常性生命週期的小型版本來處理回呼。為確認回呼事件是來自預期的使用者介面 (UI),您可以驗證回呼。在回呼驗證中,您會在 Web 網頁呈現時註冊用於驗證的事件,然後在回呼時驗證該事件。如需回呼概觀,請參閱在 ASP.NET 網頁中以程式設計方式實作用戶端回呼但不回傳。
若要實作 ICallBackEventHandler 介面
對單一檔案網頁或使用者控制項,在網頁中使用 @ Implements 指示詞以實作 ICallbackEventHandler 介面。
<%@ Page Language="VB" %> <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
<%@ Page Language="C#" %> <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
注意事項:
如果您使用的是程式碼後置 (Code-Behind) 的網頁模式,請實作部分類別 (Class) 的 ICallbackEventHandler 介面。
實作 ICallbackEventHandler 介面的 RaiseCallbackEvent 方法。這個 RaiseCallbackEvent 方法會接受表示事件引數的單一引數,如下列範例所示。
Public Sub RaiseCallbackEvent(ByVal eventArgument As String) _ Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent End Sub
public void RaiseCallbackEvent(String eventArgument) { }
實作 ICallbackEventHandler 介面的 GetCallbackResult 方法。這個 GetCallbackResult 方法不會接受任何引數,並會傳回表示回呼結果的字串。在下列範列中,會傳回稱為 returnValue 的字串。
Public Function GetCallbackResult() _ As String Implements _ System.Web.UI.ICallbackEventHandler.GetCallbackResult Return returnValue End Function
public String GetCallbackResult() { return returnValue; }
若要註冊事件驗證的回呼
覆寫 Page 類別的 Render 方法並使用 ClientScriptManager 類別的 RegisterForEventValidation 方法,以便註冊用於驗證的事件。您可以使用 Page 類別的 ClientScript 屬性,取得 ClientScriptManager 類別的參考。在下列範例中,名為 Callback1 的回呼會被用來註冊事件驗證。
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) Page.ClientScript.RegisterForEventValidation("ClientCallback1") MyBase.Render(writer) End Sub
protected override void Render(HtmlTextWriter writer) { Page.ClientScript.RegisterForEventValidation("ClientCallback1"); base.Render(writer); }
若要驗證回呼並將回呼結果傳回
在 RaiseCallbackEvent 方法中,使用 ClientScriptManager 類別的 ValidateEvent 方法來驗證事件,而且使用與註冊用於驗證的事件時所用的同一個方法簽章。在下列範例中,會使用接收一個引數的方法簽章。
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
public void RaiseCallbackEvent(String eventArgument) { try { Page.ClientScript.ValidateEvent("ClientCallback1"); // Callback logic goes here. returnValue = "callback result"; } catch { // Failed callback validation logic. } }
如果驗證通過,程式碼將繼續進行回呼事件邏輯。在 RaiseCallbackEvent 方法完成之後,會叫用 (Invoke) GetCallbackResult方法,將回呼結果當做字串傳回至用戶端指令碼函式。
如需建立與實作可支援用戶端回呼的用戶端指令碼函式之詳細資訊,請參閱在 ASP.NET 網頁中以程式設計方式實作用戶端回呼但不回傳和實作驗證的用戶端回呼範例。