Compartilhar via


Exemplo de Implementação (Visual Basic) da Chamada de Retorno do Cliente

Demonstra um página da Web do ASP.NET que implementa um callback de cliente.Para obter mais informações, consulte Implementando Callbacks de Clientes Através de Programação Sem Postbacks nas Páginas ASP.NET.

Exemplo

Descrição

O exemplo de código a seguir possui duas partes.A primeira parte do exemplo mostra uma página da Web do ASP.NET (a página.aspx).A segunda parte exibe o arquivo code-behind correspondente (o arquivo .apsx.vb).

Código

<%@ 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" >
  <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" >
    <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" ></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

Comentários

A página da Web emula uma pesquisa de banco de dados para determinar o número de itens que estão disponíveis, ou em estoque, para uma série de produtos (monitores, teclados, e assim por diante).Para simplificar este exemplo de código, o banco de dados é representado por uma lista dicionário que contém um conjunto pequeno de itens.Para cada item na tabela, a chave é o nome do item (como monitor) e o valor é o número de itens que estão em estoque.Em um aplicativo comercial, um banco de dados deve ser usado em vez disso.

Quando a página é executada, um controle ListBox é vinculado à tabela de hash para que o controle ListBox exiba a lista de produtos.A página também contém um elemento button (não um botão de controle de servidor Web), cujo evento onclick está vinculado a uma função do cliente chamada LookUpStock.Quando usuários clicam no botão, o botão executa a função LookUpStock, que obtém a seleção atual na caixa de listagem e, em seguida, executa o retorno de chamada do cliente, ao chamar a função CallServer.

A página code-behind adiciona script do lado do cliente para a página via o método RegisterClientScriptBlock.O script que é adicionado à página inclui uma função chamada CallServer, que obtém o nome do método que irá postar de volta para o servidor a partir do método GetCallbackEventReference.

O retorno de chamada do cliente chama o método RaiseCallbackEvent, o qual determina o estoque disponível para o produto passado para ele.O método GetCallbackResult retorna o valor.Observe que os argumentos enviados entre o script de cliente e o código do servidor só pode ser sequências.Para passar ou receber vários valores, você pode concatenar valores na sequência de caracteres de entrada ou de retorno, respectivamente.

Observação de segurança:

Quando você usa esse recurso, não existem possíveis riscos de segurança.Argumentos de retorno de chamada não são validados e portanto devem ser considerados perigosos.Você sempre deve verificar o conteúdo dos argumentos antes de usá-los.Para obter detalhes, consulte:Visão Geral de Scripts Maliciosos.

Consulte também

Tarefas

Como: Implementar Callbacks em páginas da Web do ASP.NET

Conceitos

Implementando Callbacks de Clientes Através de Programação Sem Postbacks nas Páginas ASP.NET

Retorno de chamada de cliente com exemplo de implementação de validação