Partager via


Développement d'un contrôle serveur ASP.NET simple

Cette rubrique décrit la procédure de création d'un contrôle serveur personnalisé simple qui possède une propriété et ne déclenche ni ne gère d'événement.

Pour créer un contrôle serveur ASP.NET simple

  1. Définissez une classe qui dérive directement ou indirectement de System.Web.UI.Control.

    using System;
    using System.Web.UI;
    public class FirstControl : Control{...}
    [Visual Basic]
    Imports System
    Imports System.Web.UI
    Public Class FirstControl   Inherits Control
    End Class
    

    La directive using permet au code de référencer des types à partir d'un espace de noms sans être obligé d'utiliser le nom qualifié complet. Control se résout donc en System.Web.UI.Control.

  2. Insérez votre contrôle dans un espace de noms. Vous pouvez définir un nouvel espace de noms ou utiliser un espace de noms existant. Le nom de l'espace de noms est la valeur du pseudo-attribut de l'espace de noms dans la directive de page Register. (Par exemple, <%@ Register TagPrefix="Custom" Namespace="CustomControls" Assembly = "CustomControls" %>). Pour obtenir un exemple d'utilisation d'un contrôle personnalisé sur une page ASP.NET, consultez l'exemple repris à la fin de cette rubrique.

    namespace CustomControls
    {
          public class FirstControl : Control {...}
    ...
    }
    [Visual Basic]
    Namespace CustomControls
       Public Class FirstControl
          Inherits Control
          ...
       End Class
    End Namespace
    
  3. Définissez les propriétés nécessaires à votre contrôle. Le fragment de code suivant définit une propriété appelée Message. Les propriétés sont comme des champs intelligents et possèdent des méthodes d'accesseurs.

    private String message = "Hello";
    //The Message property.
          public virtual String Message{
                get{
                      return message;
                }
                set{
                      message = value;
                }
          }
    [Visual Basic]
    Private _message As String = "Hello"
    Public Overridable Property Message() As String
       Get
          Return _message
       End Get
       Set
          _message = value
       End Set
    End Property
    

    Pour plus d'informations sur les propriétés, consultez Vue d'ensemble des propriétés. Pour définir les propriétés qui gèrent leur état entre les allers-retours, consultez Gestion de l'état dans un contrôle.

  4. Substituez la méthode Render que votre contrôle hérite de Control. Cette méthode fournit la logique pour l'envoi de code HTML à un navigateur client. Le code HTML que votre contrôle envoie au client est passé sous la forme d'un argument string à la méthode Write d'une instance de System.Web.UI.HtmlTextWriter, comme dans l'exemple suivant.

    protected override void Render( HtmlTextWriter writer)
                {
                writer.Write("<font> "+ this.Message + "<br>" +
                            "The date and time on the server: " +      
                             System.DateTime.Now.ToLongTimeString()
                             + "</font>");
                }
    [Visual Basic]
    Protected Overrides Sub Render(writer As HtmlTextWriter)
       writer.Write(("<font> " & Me.Message & "<br>" & _
          "The time on the server is " & _
          System.DateTime.Now.ToLongTimeString() & _
          "</font>"))
    End Sub
    

    La classe System.DateTime faisant l'objet d'un accès dans ce fragment de code est une classe utilitaire qui fournit des informations sur la date et l'heure. Remarquez que cette classe est appelée sur le serveur et retourne donc l'heure du serveur.

    Dans le fragment de code, le code HTML brut est simplement passé sous la forme d'un argument string à la méthode Write de HtmlTextWriter. Pour plus d'informations sur l'utilisation des méthodes de HtmlTextWriter pour simplifier le rendu du code HTML et pour rendre un contrôle qui dérive de WebControl, consultez Rendu d'un contrôle serveur ASP.NET.

    Par souci de simplicité, dans cet exemple, FirstControl dérive de Control. Si vous créez un contrôle qui effectue son propre rendu, dérivez System.Web.UI.WebControls.WebControl de sorte que votre contrôle puisse hériter de propriétés propres à l'interface utilisateur.

  5. Ajoutez des attributs runtime et de design pour fournir éventuellement des métadonnées personnalisées à votre contrôle. Certains contrôles nécessitent des attributs runtime. Comme exemples de contrôles exigeant des attributs runtime, citons ceux qui exposent des modèles, effectuent une liaison de données ou nécessitent une logique d'analyse personnalisée. Pour obtenir des exemples d'attributs runtime, consultez Développement d'un contrôle basé sur un modèle. Des attributs de design sont nécessaires si votre contrôle doit être utilisé dans un concepteur visuel, tel que Visual Studio .NET. Le Common Language Runtime ne nécessite pas d'attribut de design, mais ceux-ci fournissent les métadonnées indispensables à l'affichage d'un contrôle au moment du design. Le fragment de code ci-dessous applique un attribut de design à la propriété Message définie à l'étape 2.

    [Description("A message string to display to the user")]
    public virtual String Message{...}
    [Visual Basic]
    <Description("A message string to display to the user")> _
    Public Overridable Property Message() As String
       ...
    End Property
    

    Pour plus d'informations sur les attributs de design, consultez Attributs en mode design pour les composants et Attributs et prise en charge au moment du design.

  6. Enregistrez, compilez et déployez le contrôle en procédant de la manière suivante.

    1. Créez un sous-répertoire appelé /bin dans le répertoire racine de votre application.
    2. Compilez le fichier source dans un assembly (.dll) et enregistrez celui-ci dans le sous-répertoire /bin de votre application.

    Par exemple, si votre code source est en C# et si vous l'enregistrez dans un fichier appelé FirstControl.cs, vous pouvez exécuter la commande suivante à partir du répertoire contenant le fichier source.

    csc /t[arget]:library /out:[path to bin]bin\CustomControls.dll /r[eference]:System.Web.dll /r:System.dll FirstControl.cs
    

    L'option /r indique au compilateur les assemblys référencés par votre contrôle.

    Votre contrôle est à présent compilé et prêt à être utilisé à partir de n'importe quelle page ASP.NET du répertoire racine de votre application (ou d'un de ses sous-répertoires).

Vous trouverez ci-dessous le code complet de FirstControl. Le contrôle est inséré dans l'espace de noms CustomControls.

using System;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CustomControls
{
      public class FirstControl : Control
      {
            private String message = "Hello";
            
            public virtual String Message
            {
                  get
                  {
                        return message;
                  }
                  set
                  {
                        message = value;
                  }
            }
            
            protected override void Render( HtmlTextWriter writer)
            {
            writer.Write("<font> "
                        + this.Message + "<br>" + "The time on the server is " + System.DateTime.Now.ToLongTimeString()
                        + "</font>");
                  
            }
      
      }
}
[Visual Basic]
Option Explicit
Option Strict

Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls

Namespace CustomControls
   Public Class FirstControl
      Inherits Control
      Private _message As String = "Hello"
      
      Public Overridable Property Message() As String
         Get
            Return _message
         End Get
         Set
            _message = value
         End Set
      End Property
      
      Protected Overrides Sub Render(writer As HtmlTextWriter)
         writer.Write(("<font> " + Me.Message + "<br>" + "The time on the server is " + System.DateTime.Now.ToLongTimeString() + "</font>"))
      End Sub
   End Class
End Namespace

Utilisation de FirstControl sur une page ASP.NET

La page ASP.NET suivante utilise le contrôle personnalisé créé dans l'exemple précédent. La directive de page Register permet à un développeur de pages de créer un alias pour un espace de noms et fournit également à ASP.NET le nom de l'assembly qui contient le contrôle. L'exemple crée l'alias Custom pour l'espace de noms CustomControls.

<%@ Register TagPrefix="Custom" Namespace="CustomControls" Assembly = "CustomControls" %>
<html>
   <body>   
      <form  runat=server>          
          Here is a custom ASP.NET server control.<br><br>
          <Custom:FirstControl Message= "This control tells time. "  runat=server/> 
       <br>                               
      </form>
   </body>
</html>

Voir aussi

Propriétés dans les contrôles serveur ASP.NET | Événements dans les contrôles serveur ASP.NET