Практическое руководство. Реализация обратных вызовов на веб-страницах ASP.NET
Обновлен: Ноябрь 2007
В клиентских обратных вызовах функция клиентского сценария отправляет запрос веб-странице ASP.NET, который запускает сокращенную версию обычного жизненного цикла обработки обратного вызова. Чтобы убедиться, что события обратного вызова берутся из ожидаемого пользовательского интерфейса, необходимо выполнять проверку обратных вызовов. В проверке обратного вызова регистрируется событие для проверки во время отображения веб-страниц и затем событие проверяется во время обратного вызова. Общие сведения об обратных вызовах см. в разделе Программная реализация обратных вызовов клиента без обратной передачи в веб-страницы ASP.NET.
Реализация интерфейса ICallBackEventHandler
Для однофайловой страницы или пользовательского элемента управления при реализации интерфейса ICallbackEventHandler на странице необходимо использовать директиву @ Implements, как показано в следующем примере.
<%@ Page Language="VB" %> <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
<%@ Page Language="C#" %> <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
Примечание. При использовании модели страницы с выделенным кодом необходимо реализовать интерфейс ICallbackEventHandler для разделяемого класса.
Реализовать метод RaiseCallbackEvent интерфейса ICallbackEventHandler. Метод RaiseCallbackEvent принимает один аргумент, представляющий аргументы события, как показано в следующем примере.
Public Sub RaiseCallbackEvent(ByVal eventArgument As String) _ Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent End Sub
public void RaiseCallbackEvent(String eventArgument) { }
Реализовать метод GetCallbackResult интерфейса ICallbackEventHandler. Метод GetCallbackResult не принимает никаких аргументов, а возвращает строку, представляющую результат обратного вызова. В следующем примере возвращается строка с именем returnValue.
Public Function GetCallbackResult() _ As String Implements _ System.Web.UI.ICallbackEventHandler.GetCallbackResult Return returnValue End Function
public String GetCallbackResult() { return returnValue; }
Регистрация обратного вызова для проверки события
Для регистрации события для проверки необходимо переопределить метод Render класса Page и использовать метод RegisterForEventValidation класса ClientScriptManager. Ссылку на класс ClientScriptManager можно получить с помощью свойства ClientScript класса Page. В следующем примере для события проверки регистрируется обратный вызов с именем 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 используйте метод ValidateEvent класса ClientScriptManager. Используйте ту же сигнатуру метода, которая используется при регистрации события для проверки. В следующем примере используется сигнатура метода, который принимает один аргумент.
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 вызывается метод GetCallbackResult для возвращения результата обратного вызова в виде строки в функцию клиентского сценария.
Дополнительные сведения о создании и реализации функций клиентского сценария для поддержки клиентских обратных вызовов см. в разделах Программная реализация обратных вызовов клиента без обратной передачи в веб-страницы ASP.NET и Обратный вызов от клиента с примером реализации проверки.
См. также
Основные понятия
Программная реализация обратных вызовов клиента без обратной передачи в веб-страницы ASP.NET