Esempio di implementazione di callback client (Visual Basic)
Aggiornamento: novembre 2007
Nell'esempio viene illustrata una pagina Web ASP.NET che implementa un callback client. Per ulteriori informazioni, vedere Implementazione di callback client a livello di codice senza postback nelle pagine Web ASP.NET.
Esempio
Descrizione
L'esempio di codice riportato di seguito si suddivide in due parti. Nella prima parte dell'esempio viene illustrata una pagina Web ASP.NET (la pagina ASPX). Nella seconda parte viene illustrato il file code-behind corrispondente (file ASPX.VB).
Codice
<%@ 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
Commenti
La pagina Web emula una ricerca nel database per determinare il numero di elementi disponibili, o presenti in magazzino, per una serie di prodotti (monitor, tastiere e così via). Per semplificare questo esempio di codice, il database è rappresentato da un elenco dizionario che contiene un piccolo gruppo di elementi. Per ciascun elemento nella tabella, la chiave indica il nome dell'elemento (ad esempio, monitor), mentre il valore indica il numero di elementi presenti in magazzino. In un'applicazione di produzione, verrebbe invece utilizzato un database.
Durante l'esecuzione della pagina, il controllo ListBox è associato alla tabella hash in modo che il controllo ListBox possa visualizzare l'elenco di prodotti. La pagina contiene inoltre un elemento button (non un controllo server Web Button) il cui evento onclick è associato a una funzione client denominata LookUpStock. Quando l'utente fa clic su questo pulsante, viene eseguita la funzione LookUpStock che ottiene la selezione corrente dalla casella di riepilogo ed esegue il callback client chiamando la funzione CallServer.
La pagina di code-behind aggiunge uno script sul lato client alla pagina mediante il metodo RegisterClientScriptBlock. Lo script che viene aggiunto alla pagina comprende una funzione denominata CallServer che ottiene il nome del metodo che eseguirà il postback al server dal metodo GetCallbackEventReference.
Il callback client richiama il metodo RaiseCallbackEvent che determina la disponibilità in magazzino del prodotto richiesto. Il metodo GetCallbackResult restituisce il valore. Si noti che lo script client e il codice lato server possono scambiare argomenti solo come stringhe. Per passare o ricevere più valori è possibile concatenare valori nella stringa di input o restituita, rispettivamente.
Nota sulla sicurezza: |
---|
Quando viene utilizzata questa funzionalità, è necessario tenere in considerazione le potenziali minacce alla sicurezza. Gli argomenti di callback non vengono convalidati e devono pertanto essere considerati non affidabili. È sempre necessario verificare i contenuti degli argomenti prima di utilizzarli. Per ulteriori informazioni, vedere Cenni preliminari sugli attacchi tramite script. |
Vedere anche
Attività
Procedura: implementare callback in pagine Web ASP.NET
Concetti
Implementazione di callback client a livello di codice senza postback nelle pagine Web ASP.NET