Comment : ajouter des contrôles à une page Web ASP.NET par programme

Mise à jour : novembre 2007

Parfois, il est plus pratique de créer un contrôle au moment de l'exécution qu'au moment du design. Par exemple, imaginez une page de résultats de recherche dans laquelle vous souhaitez afficher les résultats dans un tableau. Comme vous ignorez combien d'éléments vont être retournés, vous souhaitez générer de façon dynamique une ligne de tableau pour chaque élément retourné.

Remarque :

Les contrôles existants peuvent souvent offrir les fonctionnalités que vous obtenez en créant des contrôles de façon dynamique. Par exemple, les contrôles tels que Repeater, DataList et RadioButtonList peuvent créer de façon dynamique des lignes ou d'autres éléments de contrôle lorsque la page s'exécute.

Pour ajouter par programme un contrôle à une page, il doit exister un conteneur pour le nouveau contrôle. Par exemple, si vous créez des lignes de tableau, le conteneur est le tableau. En l'absence d'un contrôle pouvant servir de conteneur, vous pouvez utiliser un contrôle serveur Web PlaceHolder ou Panel.

Dans certaines instances, vous souhaitez créer le texte statique et les contrôles. Pour créer du texte statique, vous pouvez utiliser un contrôle serveur Web Literal ou Label. Vous pouvez ensuite ajouter ces contrôles au conteneur comme vous le feriez pour d'autres contrôles. Pour plus d'informations sur l'état d'affichage dans les contrôles créés au moment de l'exécution, consultez Contrôles serveur Web dynamiques et état d'affichage.

Remarque importante :

Pour ajouter un contrôle à une page Web ASP.NET par programme

  1. Créez une instance du contrôle et définissez ses propriétés, comme le montre l'exemple suivant :

    Dim myLabel As New Label()
    myLabel.Text = "Sample Label"
    
    Label myLabel = new Label();
    myLabel.Text = "Sample Label";
    
    Remarque :

    Les contrôles sont généralement ajoutés à la page pendant l'étape d'initialisation de la page. Pour plus d'informations sur les étapes de page, consultez Vue d'ensemble du cycle de vie des pages ASP.NET.

  2. Ajoutez le nouveau contrôle à la collection Controls d'un conteneur déjà présent dans la page, comme le montre l'exemple suivant :

    Dim Panel1 As New Panel()
    Panel1.Controls.Add(myLabel)
    
    Panel Panel1= new Panel();
    Panel1.Controls.Add(myLabel);
    
    Remarque :

    Dans la mesure où la propriété Controls est une collection, vous pouvez utiliser la méthode AddAt pour placer le nouveau contrôle à un emplacement spécifique, par exemple devant d'autres contrôles. Toutefois, ceci peut introduire des erreurs dans la page. Pour plus d'informations, consultez Contrôles serveur Web dynamiques et état d'affichage.

    L'exemple de code suivant montre un gestionnaire d'événements pour l'événement SelectedIndexChanged d'un contrôle nommé DropDownList1. Le gestionnaire crée autant de contrôles Label que l'utilisateur en a sélectionnés dans la liste déroulante. Le conteneur des contrôles est un contrôle serveur Web PlaceHolder nommé Placeholder1.

    Note de sécurité :

    Les entrées d'utilisateur dans une page Web peuvent inclure un script client nuisible. Par défaut, les pages Web ASP.NET vérifient que les entrées d'utilisateur n'incluent pas de script ou d'éléments HTML. Pour plus d'informations, consultez Vue d'ensemble des attaques de script.

    Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
        Dim DropDownList1 As New DropDownList()
        Dim PlaceHolder1 As New PlaceHolder()
        Dim i As Integer
        Dim numlabels As Integer
    
        ' Get the number of labels to create.
        numlabels = CInt(DropDownList1.SelectedItem.Text)
        For i = 1 To numlabels
            Dim myLabel As Label = New Label()
            ' Set the label's Text and ID properties.
            myLabel.Text = "Label " & i
            myLabel.ID = "Label" & i
            PlaceHolder1.Controls.Add(myLabel)
            ' Add a spacer in the form of an HTML <br /> element
            Dim spacer As LiteralControl = New LiteralControl("<br />")
            PlaceHolder1.Controls.Add(spacer)
        Next
    End Sub
    
    private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
        DropDownList DropDownList1 = new DropDownList();
        PlaceHolder PlaceHolder1 = new PlaceHolder();
    
      // Get the number of labels to create.
     int numlabels = System.Convert.ToInt32(DropDownList1.SelectedItem.Text);
     for (int i=1; i<=numlabels; i++)
     {
       Label myLabel = new Label();
    
       // Set the label's Text and ID properties.
       myLabel.Text = "Label" + i.ToString();
       myLabel.ID = "Label" + i.ToString();
       PlaceHolder1.Controls.Add(myLabel);
       // Add a spacer in the form of an HTML <br /> element.
       PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
     } 
    }
    

Voir aussi

Tâches

Comment : définir par programme les propriétés des contrôles serveur HTML

Comment : définir par programme les propriétés de style d'un contrôle serveur ASP.NET

Concepts

Modèle d'événements du contrôle serveur Web ASP.NET

Autres ressources

Définition des propriétés des contrôles serveur ASP.NET par programme