Share via


Implémentation de rappel de client (C#), 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 de l'exemple montre une page Web ASP.NET (la page .aspx). La deuxième partie montre le fichier code-behind correspondant (le fichier .aspx.cs).

Code

<%@ Page Language="C#" AutoEventWireup="true" 
  CodeFile="ClientCallback.aspx.cs" 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/ecmascript">
    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>
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class ClientCallback : System.Web.UI.Page,
     System.Web.UI.ICallbackEventHandler
{
    protected System.Collections.Specialized.ListDictionary catalog;
    protected String returnValue;
    protected void Page_Load(object sender, EventArgs e)
    {
        String cbReference =
            Page.ClientScript.GetCallbackEventReference(this,
            "arg", "ReceiveServerData", "context");
        String callbackScript;
        callbackScript = "function CallServer(arg, context)" +
            "{ " + cbReference + ";}";
        Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
            "CallServer", callbackScript, true);

        catalog = new System.Collections.Specialized.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();

    }

    public void RaiseCallbackEvent(String eventArgument)
    {
        if (catalog[eventArgument] == null)
        {
            returnValue = "-1";
        }
        else
        {
            returnValue = catalog[eventArgument].ToString();
        }
    }
    public String GetCallbackResult()
    {
        return returnValue;
    }
}

Commentaires

La page Web émule une consultation de base de données pour 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 Button) 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 de la zone de liste, puis exécute le rappel client en appelant la fonction CallServer.

La page code-behind ajoute le script côté client à la page 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 pour déterminer 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 par conséquent doivent ê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