Implémentation de rappel de client (Visual Basic), exemple

Mise à jour : novembre 2007

Montre une page Web ASP.NET qui implémente un rappel client. Pour plus d'informations, consultez Implémentation par programme des rappels clients sans publication (postback) dans des pages Web ASP.NET.

Exemple

Description

L'exemple de code suivant se présente en deux parties. La première partie montre une page Web ASP.NET (la page .aspx). La deuxième partie montre le fichier code-behind correspondant (le fichier .aspx.vb).

Code

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

Commentaires

La page Web émule une consultation de base de données afin de déterminer le nombre d'articles disponibles, ou en réserve, pour une série de produits (écrans, claviers, etc.). Pour simplifier cet exemple de code, la base de données est représentée par une liste de dictionnaire qui contient un petit jeu d'articles. La clé de chacun des articles de la table est le nom de l'article (par exemple, écran), et sa valeur est le nombre d'articles en réserve. Dans une application de production, on utiliserait plutôt une base de données.

Lorsque la page s'exécute, un contrôle ListBox est lié à la table de hachage afin que le contrôle ListBox affiche la liste des produits. La page contient également un élément button (et non un contrôle serveur Web de bouton) dont l'événement onclick est lié à une fonction cliente nommée LookUpStock. Lorsque les utilisateurs cliquent sur le bouton, ce dernier exécute la fonction LookUpStock, ce qui récupère la sélection actuelle depuis la zone de liste, puis exécute le rappel client en appelant la fonction CallServer.

La page code-behind ajoute à la page le script côté client via la méthode RegisterClientScriptBlock. Le script ajouté à la page comprend une fonction nommée CallServer, laquelle obtient le nom de la méthode qui publiera sur le serveur à partir de la méthode GetCallbackEventReference.

Le rappel client appelle la méthode RaiseCallbackEvent, qui détermine la réserve disponible du produit qui lui a été passé. La méthode GetCallbackResult retourne la valeur. Notez que les arguments échangés entre le script client et le code serveur ne peuvent être que des chaînes. Pour passer ou recevoir plusieurs valeurs, vous pouvez concaténer des valeurs respectivement dans la chaîne d'entrée ou de retour.

Note de sécurité :

Lorsque vous utilisez cette fonctionnalité, sachez qu'elle représente une menace pour la sécurité. Les arguments de rappel ne sont pas validés et doivent donc être considérés comme potentiellement dangereux. Vous devez toujours vérifier le contenu des arguments avant de les utiliser. Pour plus d'informations, consultez Vue d'ensemble des attaques de script.

Voir aussi

Tâches

Comment : implémenter des rappels dans des pages Web ASP.NET

Concepts

Implémentation par programme des rappels clients sans publication (postback) dans des pages Web ASP.NET

Rappel client avec implémentation de la validation, exemple