Поделиться через


Практическое руководство. Реализация обратных вызовов на веб-страницах ASP.NET

Обновлен: Ноябрь 2007

В клиентских обратных вызовах функция клиентского сценария отправляет запрос веб-странице ASP.NET, который запускает сокращенную версию обычного жизненного цикла обработки обратного вызова. Чтобы убедиться, что события обратного вызова берутся из ожидаемого пользовательского интерфейса, необходимо выполнять проверку обратных вызовов. В проверке обратного вызова регистрируется событие для проверки во время отображения веб-страниц и затем событие проверяется во время обратного вызова. Общие сведения об обратных вызовах см. в разделе Программная реализация обратных вызовов клиента без обратной передачи в веб-страницы ASP.NET.

Реализация интерфейса ICallBackEventHandler

  1. Для однофайловой страницы или пользовательского элемента управления при реализации интерфейса ICallbackEventHandler на странице необходимо использовать директиву @ Implements, как показано в следующем примере.

    <%@ Page Language="VB" %>
    <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
    
    <%@ Page Language="C#" %>
    <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
    
    ms366518.alert_note(ru-ru,VS.90).gifПримечание.

    При использовании модели страницы с выделенным кодом необходимо реализовать интерфейс ICallbackEventHandler для разделяемого класса.

  2. Реализовать метод RaiseCallbackEvent интерфейса ICallbackEventHandler. Метод RaiseCallbackEvent принимает один аргумент, представляющий аргументы события, как показано в следующем примере.

    Public Sub RaiseCallbackEvent(ByVal eventArgument As String) _
    Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
    
    End Sub
    
    public void RaiseCallbackEvent(String eventArgument)
    {
    
    }
    
  3. Реализовать метод 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

Обратный вызов от клиента с примером реализации проверки