Rendering di un controllo server ASP.NET

L'esecuzione del rendering è il processo di creazione di una rappresentazione visiva in un'area di visualizzazione. Nel caso di richieste Web, il rendering effettivo viene eseguito da un browser Web del client o da un altro dispositivo di visualizzazione. L'attività del framework di pagina ASP.NET consiste nell'invio di testo HTML (o di testo in un altro linguaggio di markup, ad esempio XML o WML) in risposta a una richiesta Web. L'attività della pagina (e dei relativi controlli figlio) consiste nella scrittura del contenuto dei tag in un flusso di output. A questo scopo, la classe base System.Web.UI.Control mette a disposizione il metodo Render, che presenta la firma seguente.

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

La classe System.Web.UI.HtmlTextWriter incapsula un flusso di output per la scrittura del contenuto dei tag. Nel caso più semplice, l'autore di un controllo può eseguire l'override del metodo Render per passare il testo HTML (o qualsiasi altro contenuto dei tag) come argomento di una stringa al metodo Write di un'istanza di 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 dispone di molti metodi di utilità che semplificano la scrittura HTML. È consigliabile utilizzare questi metodi invece di passare direttamente stringhe di testo a Write, poiché rendono il codice più leggibile e riutilizzabile, e non è necessario uno sviluppatore esperto sui dettagli della sintassi HTML. Per gli esempi relativi ai metodi di utilità, vedere la classe HtmlTextWriter. HtmlTextWriter offre, inoltre, la conversione automatica tra versioni differenti di HTML per il rendering di alto e basso livello.

È più efficace eseguire più chiamate a HtmlTextWriter.Write che concatenare stringhe e passare un singolo argomento di stringa al metodo Write.

**Nota   **Per semplicità, numerosi esempi nella documentazione passano stringhe di testo direttamente a HtmlTextWriter.Write. Tuttavia, nei controlli è consigliabile utilizzare i metodi di utilità di HtmlTextWriter.

La classe base Control mette a disposizione un metodo RenderChildren per eseguire il rendering del contenuto da eventuali controlli figlio.

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

Un controllo composto può eseguire il rendering del contenuto in aggiunta a quello eseguito dai controlli figlio, se esegue il rendering prima o dopo la chiamata del metodo RenderChildren. Il frammento di codice riportato di seguito illustra un esempio.

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'implementazione della classe base Control di Render chiama sempre RenderChildren. Se non si desidera che venga eseguito il rendering dei controlli figlio del controllo, eseguire l'override di RenderChildren per non eseguire alcuna operazione, come illustrato nel frammento di codice seguente.

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

Esecuzione del rendering dei metodi in WebControl

Oltre ai metodi di rendering forniti dalla classe base Control, la classe System.Web.UI.WebControls.WebControl offre molti altri metodi per facilitare l'esecuzione del rendering.

Il metodo AddAttributesToRender consente a un controllo che deriva da WebControl di specificare gli attributi HTML aggiuntivi e gli stili dei fogli di stile CSS di cui eseguire il rendering. Nell'esempio seguente viene mostrato come un controllo pulsante possa scrivere gli attributi nel flusso di output. Si noti la chiamata a base.AddAttributestoRender, che garantisce che gli attributi di cui è stato eseguito il rendering dalla classe base vengano mantenuti.

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

I metodi RenderBeginTag e RenderEndTag consentono a un controllo che deriva da WebControl di eseguire l'override dei tag iniziali e finali degli elementi HTML. Il metodo RenderContents consente a un controllo di specificare il contenuto all'interno dei tag.

Nota   Per scrivere testo nel flusso di output di un controllo server Web, ovvero una classe che deriva da WebControl, è consigliabile eseguire l'override del metodo RenderContents invece di eseguire direttamente l'override del metodo Render. In tal modo si assicura che le funzionalità del rendering implementate da WebControl, ad esempio la generazione di attributi, vengano salvate. Per informazioni dettagliate, vedere Esempi di esecuzione del rendering di un controllo server.

Vedere anche

Gestione dello stato in un controllo | Esempi di esecuzione del rendering di un controllo server