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
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.
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
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.
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.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.
Enregistrez, compilez et déployez le contrôle en procédant de la manière suivante.
- Créez un sous-répertoire appelé /bin dans le répertoire racine de votre application.
- 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