Sviluppo di un controllo server ASP.NET semplice

In questo argomento viene fornita una descrizione dettagliata dei passaggi necessari per la creazione di un controllo server semplice personalizzato che comprende una proprietà e non genera o gestisce eventi.

Per creare un controllo server ASP.NET semplice

  1. Definire una classe derivata direttamente o indirettamente da 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 direttiva using consente al codice di fare riferimento ai tipi di uno spazio dei nomi senza utilizzare il nome completo. In tal modo, Control si risolve in System.Web.UI.Control.

  2. Racchiudere il controllo in uno spazio dei nomi. È possibile definire un nuovo spazio dei nomi o utilizzarne uno esistente. Il nome dello spazio dei nomi è costituito dal valore dello pseudo-attributo Namespace nella direttiva di pagina Register (ad esempio, <%@ Register TagPrefix="Custom" Namespace="CustomControls" Assembly = "CustomControls" %>). Per un esempio di utilizzo di un controllo personalizzato in una pagina ASP.NET, vedere l'esempio riportato al termine di questo argomento.

    namespace CustomControls
    {
          public class FirstControl : Control {...}
    ...
    }
    [Visual Basic]
    Namespace CustomControls
       Public Class FirstControl
          Inherits Control
          ...
       End Class
    End Namespace
    
  3. Definire le proprietà richieste dal controllo. La porzione di codice riportata di seguito consente di definire una proprietà denominata Message. Le proprietà sono simili a campi intelligenti e dispongono di metodi delle funzioni di accesso.

    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
    

    Per ulteriori informazioni sulle proprietà, vedere Panoramica sulle proprietà. Per definire proprietà in grado di mantenere lo stato nei percorsi andata/ritorno, vedere Mantenimento dello stato in un controllo.

  4. Eseguire l'override del metodo Render che il controllo eredita da Control. Tale metodo fornisce la logica per l'invio dei dati HTML a un browser client. I dati HTML che il controllo invia al client vengono passati come argomento di stringa al metodo Write di un'istanza di System.Web.UI.HtmlTextWriter, come illustrato nel seguente esempio.

    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, alla quale si accede in questa porzione di codice, è una classe di utilità che fornisce informazioni relative alla data e all'ora. Questa classe viene richiamata sul server e, pertanto, restituisce l'ora sul server.

    Nella porzione di codice, i dati HTML non elaborati vengono semplicemente passati come argomento di stringa al metodo Write di HtmlTextWriter. Per ulteriori informazioni sull'utilizzo dei metodi di HtmlTextWriter per semplificare il rendering dei dati HTML e per il rendering di un controllo che deriva da WebControl, vedere Rendering di un controllo server ASP.NET.

    Per maggiore semplicità, in questo esempio FirstControl deriva da Control. Se si sta creando un controllo che esegue il rendering, è possibile derivarlo da System.Web.UI.WebControls.WebControl per consentire al controllo di ereditare proprietà specifiche dell'interfaccia utente.

  5. Aggiungere attributi della fase di progettazione e della fase di esecuzione per fornire i metadati personalizzati richiesti per il controllo. Gli attributi della fase di esecuzione costituiscono elementi obbligatori per alcuni controlli. Gli attributi della fase di esecuzione sono necessari per i controlli che espongono modelli, eseguono l'associazione ai dati o richiedono una logica di analisi personalizzata. Per esempi di attributi della fase di esecuzione, vedere Sviluppo di un controllo basato su template. Gli attributi in fase di progettazione sono necessari se il controllo verrà utilizzato in una finestra di progettazione visiva, quale Visual Studio .NET. Pur non essendo necessari per Common Language Runtime, gli attributi in fase di progettazione forniscono tuttavia metadati essenziali per la visualizzazione di un controllo in fase di progettazione. Nella porzione di codice riportata di seguito viene applicato un attributo della fase di progettazione alla proprietà Message definita nel passaggio 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
    

    Per ulteriori informazioni sugli attributi della fase di progettazione, vedere Attributi della fase di progettazione per i componenti e Attributi e supporto in fase di progettazione.

  6. Salvare, compilare e distribuire il controllo effettuando le operazioni riportate di seguito.

    1. Creare una sottodirectory denominata /bin nella directory principale dell'applicazione.
    2. Compilare il file di origine in un assembly (DLL) e salvare l'assembly nella sottodirectory /bin dell'applicazione.

    Se, ad esempio, il codice sorgente è in C# e viene salvato in un file denominato FirstControl.cs, è possibile eseguire il seguente comando dalla directory contenente il file di origine.

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

    L'opzione /r consente di comunicare al compilatore gli assembly ai quali fa riferimento il controllo.

    Il controllo è ora compilato e può essere utilizzato da qualsiasi pagina ASP.NET presente nella directory principale dell'applicazione o in una delle sottodirectory.

Di seguito viene riportato il codice completo per FirstControl. Il controllo è racchiuso nello spazio dei nomi 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

Utilizzo di FirstControl in una pagina ASP.NET

Nell'esempio di pagina ASP.NET riportato di seguito viene utilizzato il controllo personalizzato creato nell'esempio precedente. La direttiva di pagina Register consente a uno sviluppatore di pagine di creare un alias per uno spazio dei nomi e fornisce ad ASP.NET il nome dell'assembly contenente il controllo. In questo esempio viene creato l'alias Custom per lo spazio dei nomi 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>

Vedere anche

Proprietà nei controlli server ASP.NET | Eventi nei controlli server ASP.NET