Partager via


Rendu d'un contrôle serveur ASP.NET

Le rendu désigne le processus de création d'une représentation visuelle sur une surface d'affichage. Dans le cas des demandes Web, le rendu réel est effectué par le navigateur Web du client ou un autre périphérique d'affichage. La tâche de l'infrastructure de page ASP.NET consiste à envoyer un code HTML (ou du texte dans un autre langage de balisage tel que XML ou WML) en réponse à une demande Web. La tâche d'une page (et de ses contrôles enfants) consiste à écrire le contenu de balisage dans un flux de sortie. À cette fin, la classe de base System.Web.UI.Control fournit la méthode Render, qui possède la signature suivante.

protected virtual void Render(HtmlTextWriter writer);
[Visual Basic]
Overridable Protected Sub Render(ByVal writer As HtmlTextWriter)

La classe System.Web.UI.HtmlTextWriter encapsule un flux de sortie pour l'écriture du contenu de balisage. Dans le cas le plus simple, un auteur de contrôle peut substituer Render afin de passer le code HTML (ou un autre contenu de balisage) en tant qu'argument de chaîne à la méthode Write d'une instance de HtmlTextWriter.

protected override void Render(HtmlTextWriter output) {
    output.Write ("<h3> Hello </h3>");
}
[Visual Basic]
Protected Overrides Sub Render(output As HtmlTextWriter)
    output.Write("<h3> Hello </h3>")
End Sub

HtmlTextWriter fournit de nombreuses méthodes utilitaires qui simplifient l'écriture de code HTML. Vous devez utiliser ces méthodes au lieu de passer directement des chaînes de texte à Write car elles rendent le code plus lisible et réutilisable (et n'exigent pas du développeur de connaître par le détail la syntaxe HTML). Consultez la classe HtmlTextWriter pour des exemples de ces méthodes utilitaires. HtmlTextWriter assure également des conversions automatiques entre différentes versions du code HTML pour un rendu de haut niveau ou de bas niveau.

Il est plus efficace d'effectuer plusieurs appels à HtmlTextWriter.Write que de concaténer des chaînes et de passer un seul argument de chaîne à la méthode Write.

**Remarque   **Par souci de simplicité, plusieurs exemples de la documentation passent des chaînes de texte directement à HtmlTextWriter.Write. Cependant, dans vos contrôles, vous devez utiliser les méthodes utilitaires de HtmlTextWriter.

La classe de base Control fournit une méthode RenderChildren pour le rendu de contenu à partir de ses contrôles enfants (le cas échéant).

protected virtual void RenderChildren(HtmlTextWriter writer);
[Visual Basic]
Overridable Protected Sub RenderChildren(ByVal writer As HtmlTextWriter)

Un contrôle composite peut rendre un contenu en plus de celui rendu par ses contrôles enfants ; ce contenu est rendu avant ou après l'appel de la méthode RenderChildren. Le fragment de code suivant en montre un exemple.

public class Composite : Control {
    ...
    protected override void Render(HtmlTextWriter writer) {
       writer.Write ("My child controls are rendered below.");
       RenderChildren(writer);
       writer.Write ("My child controls are rendered above.");
    }
}
[Visual Basic]
Public Class Composite
   Inherits Control
   ...
   Protected Overrides Sub Render(writer As HtmlTextWriter)
      writer.Write("My child controls are rendered below.")
      RenderChildren(writer)
      writer.Write("My child controls are rendered above.")
   End Sub
End Class

L'implémentation de Render par la classe de base Control appelle toujours RenderChildren. Si vous ne souhaitez pas que les contrôles enfants d'un contrôle soient rendus, substituez RenderChildren pour qu'elle n'ait aucun effet, comme indiqué dans le fragment de code suivant.

protected override void RenderChildren(HtmlTextWriter writer) {
    // Do nothing so that child controls are not rendered.
}
[Visual Basic]
Protected Overrides Sub RenderChildren(writer As HtmlTextWriter)
    ' Do nothing so that child controls are not rendered.
End Sub

Méthodes de rendu dans WebControl

Outre les méthodes de rendu fournies par la classe de base Control, la classe System.Web.UI.WebControls.WebControl fournit plusieurs autres méthodes destinées à faciliter le rendu.

La méthode AddAttributesToRender permet à un contrôle qui dérive de WebControl de spécifier des attributs HTML supplémentaires et autorise le rendu des styles des feuilles de style en cascade (CSS, Cascading Style Sheet). L'exemple suivant montre comment un contrôle bouton peut écrire ses attributs dans le flux de sortie. Notez l'appel à base.AddAttributestoRender, qui s'assure que les attributs rendus par la classe de base sont conservés.

protected override void AddAttributesToRender(HtmlTextWriter writer) {
    writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");
    writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);
    writer.AddAttribute(HtmlTextWriterAttribute.Value, Text);
    base.AddAttributesToRender(writer);
}
[Visual Basic]
Protected Overrides Sub AddAttributesToRender(writer As HtmlTextWriter)
    writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit")
    writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID)
    writer.AddAttribute(HtmlTextWriterAttribute.Value, [Text])
    MyBase.AddAttributesToRender(writer)
End Sub

Les méthodes RenderBeginTag et RenderEndTag permettent à un contrôle qui dérive de WebControl de substituer les balises de début et de fin des éléments HTML. La méthode RenderContents permet à un contrôle de spécifier le contenu qui figure entre les balises.

Remarque   Pour écrire du texte dans le flux de sortie d'un contrôle serveur Web (une classe qui dérive de WebControl), vous devez substituer la méthode RenderContents au lieu de substituer directement la méthode Render. Cela garantit le maintien de la fonctionnalité de rendu implémentée par WebControl (comme l'émission d'attributs). Pour plus d'informations, consultez Rendu d'exemples d'un contrôle serveur.

Voir aussi

Gestion de l'état dans un contrôle | Rendu d'exemples d'un contrôle serveur