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


Пример реализации обратного вызова от клиента (Visual Basic)

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

Демонстрирует веб-страницу ASP.NET, которая реализует обратный вызов от клиента. Дополнительные сведения см. в разделе Программная реализация обратных вызовов клиента без обратной передачи в веб-страницы ASP.NET.

Пример

Описание

Следующий пример состоит из двух частей: кода веб-страницы ASP.NET (файл с расширением ASPX) и файла с выделенным кодом (файл с расширением ASPX.VB).

Код

<%@ Page Language="VB" AutoEventWireup="true" 
  CodeFile="ClientCallback.aspx.vb" Inherits="ClientCallback" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
  <title>Client Callback Example</title>
  <script type="text/javascript">
    function LookUpStock()
    {
        var lb = document.getElementById("ListBox1");
        var product = lb.options[lb.selectedIndex].text;
        CallServer(product, "");
    }

    function ReceiveServerData(rValue)
    {   
        document.getElementById("ResultsSpan").innerHTML = rValue;        
    }
</script>
</head>
<body>
  <form id="form1" runat="server">
    <div>
      <asp:ListBox ID="ListBox1" Runat="server"></asp:ListBox>
      <br />
      <br />
      <button type="Button" onclick="LookUpStock()">Look Up Stock</button>
      <br />
      <br />
      Items in stock: <span id="ResultsSpan" runat="server"></span>
      <br />
    </div>
  </form>
</body>
</html>
Partial Class ClientCallback
    Inherits System.Web.UI.Page
    Implements System.Web.UI.ICallbackEventHandler

    Protected catalog As ListDictionary
    Protected returnValue As String
    Sub Page_Load(ByVal sender As Object, ByVal e As _
        System.EventArgs) Handles Me.Load
        Dim cbReference As String
        cbReference = Page.ClientScript.GetCallbackEventReference(Me, _
            "arg", "ReceiveServerData", "context")
        Dim callbackScript As String = ""
        callbackScript &= "function CallServer(arg, context) { " & _
            cbReference & "} ;"
        Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), _
            "CallServer", callbackScript, True)

        ' Populate List Dictionary with invented database data
        catalog = New ListDictionary()
        catalog.Add("monitor", 12)
        catalog.Add("laptop", 10)
        catalog.Add("keyboard", 23)
        catalog.Add("mouse", 17)

        ListBox1.DataSource = catalog
        ListBox1.DataTextField = "key"
        ListBox1.DataBind()
    End Sub

    Public Sub RaiseCallbackEvent(ByVal eventArgument As String) _
    Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent

        If catalog(eventArgument) Is Nothing Then
            returnValue = "-1"
        Else
            returnValue = catalog(eventArgument).ToString()
        End If

    End Sub

    Public Function GetCallbackResult() _
    As String Implements _
    System.Web.UI.ICallbackEventHandler.GetCallbackResult

        Return returnValue

    End Function

End Class

Примечания

Веб-страница имитирует поиск в базе данных, содержащей группы товаров (мониторы, клавиатуры и т.д.), для определения количества товаров, имеющихся в наличии или на складе. Чтобы упростить данный пример, база данных представляется в виде словаря-списка из небольшого набора элементов. Для каждого товара в таблице ключом является имя элемента, например «monitor», а значением — количество товаров, имеющихся на складе. В реальных приложениях следует использовать базу данных.

При запуске страницы элемент управления ListBox привязывается к хэш-таблице, чтобы отображать список товаров. Страница также содержит элемент button (не веб-серверный элемент управления button), событие onclick которого привязано к клиентской функции с именем LookUpStock. Когда пользователь нажимает эту кнопку, вызывается функция LookUpStock, которая получает текущий выбранный в списке элемент и выполняет обратный вызов от клиента с помощью функции CallServer.

Фоновый код добавляет сценарий на страницу клиента с помощью метода RegisterClientScriptBlock. Добавляемый на страницу сценарий содержит функцию с именем CallServer, которая получает имя метода. Это имя будет передано серверу из метода GetCallbackEventReference.

Обратный вызов клиента приводит к вызову метода RaiseCallbackEvent, который определяет объем запасов переданного ему наименования товара. Это значение возвращает метод GetCallbackResult. Обратите внимание, что аргументы, передаваемые между клиентским сценарием и серверным кодом, могут быть только строками. Чтобы передать или получить несколько значений, можно объединить входные или выходные строки соответственно.

ms178209.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

При использовании данного метода возникают потенциальные угрозы безопасности. Аргументы обратного вызова не проверяются и поэтому должны рассматриваться как небезопасные. Всегда следует выполнять проверку содержимого аргументов перед их использованием. Дополнительные сведения см. в разделе Общие сведения об использовании сценариев.

См. также

Задачи

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

Основные понятия

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

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