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. |