Condividi tramite


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

Esempio di callback client con implementazione di convalida