Compartir a través de


Ejemplo de implementación de la devolución de llamada del cliente (Visual Basic)

Actualización: noviembre 2007

Muestra una página Web ASP.NET que implementa una devolución de llamada del cliente. Para obtener más información, vea Implementar mediante programación devoluciones de llamada de cliente sin devoluciones de datos en páginas web de ASP.NET.

Ejemplo

Descripción

El ejemplo de código siguiente se compone de dos partes. La primera parte muestra una página Web ASP.NET (la página .aspx). La segunda muestra el archivo de código subyacente correspondiente (el archivo .aspx.vb).

Código

' ClientCallback.aspx page
<%@ Page Language="VB" AutoEventWireup="false" 
  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 >
  <title>Untitled Page</title>
  <script type="text/javascript">
    function LookUpStock()
    {
        var lb = document.forms[0].ListBox1;
        var product = lb.options[lb.selectedIndex].text 
        CallServer(product, "");
    }

    function ReceiveServerData(rValue)
    {
        Results.innerText = rValue;
    }
</script>
</head>
<body>
  <form id="form1" >
    <div>
      <asp:ListBox ID="ListBox1" Runat="server"></asp:ListBox>
      <br />
      <br />
      <button onclick="LookUpStock()">Look Up Stock</button>
      <br />
      <br />
      Items in stock: <span ID="Results"></span>
      <br />
    </div>
  </form>
</body>
</html>

' ClientCallback.aspx.vb code-behind file
Partial Class ClientCallback
    Inherits System.Web.UI.Page
    Implements System.Web.UI.ICallbackEventHandler

    Protected catalog As ListDictionary
    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 Function RaiseCallbackEvent(ByVal eventArgument _
        As String) As String Implements _
            System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
        Dim returnValue As String
        If catalog(eventArgument) Is Nothing Then
            returnValue = "-1"
        Else
            returnValue = catalog(eventArgument).ToString()
        End If
        Return returnValue
    End Function
End Class

Comentarios

La página Web emula una búsqueda de base de datos para determinar el número de elementos disponibles, o en existencias, para una serie de productos (monitores, teclados, etc.). Para simplificar este ejemplo de código, la base de datos está representada por una lista de diccionario que contiene un pequeño grupo de elementos. Para cada elemento de la tabla, la clave es el nombre del elemento (por ejemplo, monitor) y el valor es el número de elementos que hay en existencias. En una aplicación de producción, se utilizaría una base de datos.

Cuando se ejecuta la página, se enlaza un control ListBox a la tabla hash para que el control ListBox muestre la lista de productos. La página también contiene un elemento button (no un control de servidor Web de botón), cuyo evento onclick está enlazado a una función del cliente denominada LookUpStock. Cuando los usuarios hacen clic en el botón, éste ejecuta la función LookUpStock, que obtiene la selección actual del cuadro de lista y, a continuación, realiza la devolución de llamada del cliente llamando a la función CallServer.

La página de código subyacente agrega secuencias de comandos de cliente a la página a través del método RegisterClientScriptBlock. La secuencia de comandos que se agrega a la página incluye una función denominada CallServer, que obtiene el nombre del método que realiza la devolución de datos al servidor desde el método GetCallbackEventReference.

La devolución de llamada del cliente invoca al método RaiseCallbackEvent, que devuelve las existencias disponibles para el producto deseado. Tenga en cuenta que los argumentos enviados entre la secuencia de comandos de cliente y el código del servidor sólo pueden ser cadenas.

Nota de seguridad:

Cuando se utiliza esta característica, la seguridad puede verse amenazada. Los argumentos de la devolución de llamada no se validan y, por consiguiente, deben considerarse no seguros. Debe comprobar siempre el contenido de los argumentos antes de utilizarlos. Para obtener más información, vea Información general sobre los ataques mediante secuencias de comandos.

Vea también

Conceptos

Implementar mediante programación devoluciones de llamada de cliente sin devoluciones de datos en páginas web de ASP.NET