Sintassi di controlli server personalizzati

La sintassi di controlli server personalizzati viene utilizzata per dichiarare i controlli utente e i controlli server personalizzati come elementi di codice nei file di applicazione ASP.NET, compresi pagine Web, controlli utente e pagine master. Questa sintassi è pressocché identica a quella utilizzata per dichiarare i controlli server ASP.NET, con la differenza che per i controlli utente e personalizzati si dichiara generalmente un prefisso di tag univoco e un nome tag che corrisponde al controllo.

<tagprefix:tagname id="OptionalID"
   attributename="value"
   eventname="eventhandlermethod"
   runat="server" />
OR
<tagprefix:tagname id="OptionalID"
   runat="server" />

Attributi

  • tagprefix
    Un alias per lo spazio dei nomi completo degli elementi di codice utilizzati nella pagina. Il valore dell'alias è arbitrario ma consente di associare rapidamente il codice relativo a un controllo personalizzato o a un controllo utente allo spazio dei nomi degli altri elementi di codice dichiarati in un file ASP.NET.
  • tagname
    Per un controllo personalizzato, tagname si riferisce al nome di un tipo per cui in ASP.NET verrà creata un'istanza di esecuzione. Per un controllo utente, tagname viene mappato al file di origine associato che definisce il controllo utente e tale file, a sua volta, definisce il tipo per cui in ASP.NET viene creata un'istanza.
  • id
    Identificatore univoco che consente un riferimento al controllo al livello di programmazione.
  • attributename
    Il nome di un attributo che corrisponde a una proprietà del controllo.
  • value
    Valore assegnato all'attributo (proprietà).
  • eventname
    Nome di un evento del controllo
  • eventhandlermethod
    Il nome di un gestore eventi definito per la gestione dell'evento specificato per il controllo.

Note

Utilizzare la sintassi dei controlli server personalizzati per dichiarare i controlli utente e i controlli server personalizzati nel corpo di una pagina Web Form. Per il corretto funzionamento di questa sintassi, è necessario che il controllo sia registrato nella pagina o in un file di configurazione. È possibile registrare un controllo in tutte le pagine di un'applicazione aggiungendolo al Elemento controls per pages (schema delle impostazioni ASP.NET) del file Web.config. È possibile registrare un controllo in una pagina singola mediante la direttiva @ Register.

Il tag di apertura di un elemento per un controllo utente o personalizzato deve comprendere una coppia attributo/valore runat="server". Per attivare il riferimento a livello di programmazione nel controllo, è possibile specificare un valore univoco per l'attributo id.

Qualsiasi proprietà creata in un controllo utente o server personalizzato può essere esposta in modo dichiarativo nel tag di apertura del controllo server. È sufficiente dichiarare la proprietà come attributo e assegnarle un valore. Se si crea, ad esempio, un controllo personalizzato di casella di testo con una proprietà width dichiarando width="50" nel tag di apertura del controllo, la larghezza di visualizzazione del controllo server viene impostata su cinquanta pixel.

In alcuni casi gli attributi possono essere oggetti con proprietà specifiche. In tal caso, includere il nome della proprietà nella dichiarazione. Se si crea, ad esempio, un controllo personalizzato di casella di testo che include un attributo font, può essere inclusa una proprietà name. È possibile dichiarare la proprietà nel tag di apertura del controllo server come font-name="Arial". Per ulteriori informazioni sullo sviluppo di controlli server personalizzati con proprietà, vedere Proprietà e sottoproprietà semplici dei controlli server.

È inoltre possibile dichiarare eventi con controlli server e utente personalizzati seguendo la stessa procedura utilizzata per i controlli server ASP.NET. È sufficiente specificare l'associazione eventi nel tag di apertura del controllo server con un attributo e un valore. Per ulteriori informazioni sulla creazione di controlli server personalizzati che supportano eventi, vedere Gestione di eventi server in pagine Web ASP.NET.

È possibile inoltre sviluppare controlli server personalizzati che supportino modelli inline. Per informazioni dettagliate su come dichiarare modelli in un controllo server personalizzato, vedere Sintassi di modelli inline di controlli server. Per informazioni su come creare controlli server personalizzati che supportino modelli inline, vedere Procedura: creare controlli utente ASP.NET basati su modelli.

Esempio

Nell'esempio riportato di seguito viene illustrato come registrare e dichiarare un controllo server personalizzato in una pagina Web Form. La prima sezione di codice crea una classe pubblica semplice derivata dalla classe Button. La seconda parte del codice è una pagina Web che contiene il pulsante personalizzato. Nella pagina Web viene utilizzata la direttiva @ Register per registrare lo spazio dei nomi per il controllo e per impostare l'attributo tagprefix. Al controllo viene fatto, quindi, riferimento nella pagina mediante il valore tagprefix e il nome di classe del controllo separati dai due punti (:).

Nota

Per l'esecuzione dell'esempio di codice è necessario compilare il controllo personalizzato riportato. È possibile effettuare la compilazione in modo esplicito e inserire l'assembly risultante nella Global Assembly Cache o nella cartella Bin del proprio sito Web. In alternativa, è possibile inserire il codice sorgente nella cartella App_Code del proprio sito, dove verrà compilato dinamicamente in fase di esecuzione. In questo esempio di codice viene utilizzata la compilazione dinamica. Per questo motivo non è necessario che la direttiva @ Register della pagina dichiari un attributo Assembly in quanto il codice sorgente viene compilato dinamicamente in fase di esecuzione. Per una procedura dettagliata della compilazione, vedere Procedura dettagliata: sviluppo e utilizzo di un controllo server personalizzato.

// A custom Button control to reference in the page.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Security.Permissions
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Samples.AspNet.CS.Controls
{
  [AspNetHostingPermission(SecurityAction.Demand,
  Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class CustomButton : Button
  {
    public CustomButton()
    {
      this.Text = "Click Here";
    }
  }
}

<!-- A page that references the custom control. -->
<%@Page language="C#" %>
<!-- This directive does not require the assembly attribute 
     because the source file is in the App_Code directory, 
     so it gets dynamically compiled with the page. -->
<%@ Register TagPrefix="custom"      namespace="Samples.AspNet.CS.Controls" %>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html>   
 <script runat="server">
     private void custButton_Click(Object sender, EventArgs e)
     {
       TextBox.BackColor = System.Drawing.Color.Green;
       TextBox.Text = "You clicked the button";
     }       
 </script>
 <body>      
    <form id="Form1" runat=server>
       Here is the custom button.<br>
       <custom:CustomButton runat="server" id="custButton"          onclick="custButton_Click" /> 
       <br>
       <br>
       <asp:TextBox id = "TextBox" Text="Click the button"
        Width = "200" BackColor="Cyan" runat="server" /> 
       <br>      
    </form>         
  </body>          
</html>
' A custom Button control to reference in the page.
Imports System
Imports System.Collections
Imports System.ComponentModel
Imports System.Drawing
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.Configuration
Imports System.Data.Sql
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

Namespace Samples.AspNet.VB.Controls

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class CustomButton
    Inherits Button

    Public Sub New()
      Me.Text = "Click Here"
    End Sub

  End Class

End Namespace
<!-- A page that references the custom control. -->
<%@ Page Language="VB" %>
<!-- This directive does not require the assembly attribute 
     because the source file is in the App_Code directory, 
     so it gets dynamically compiled with the page. -->
<%@ Register TagPrefix="custom"    namespace="Samples.AspNet.VB.Controls" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>   
 <script runat="server">
   Sub custButton_Click(ByVal sender As Object, _
    ByVal e As EventArgs)
     TextBox.BackColor = Drawing.Color.Green
     TextBox.Text = "You clicked the button."
   End Sub
 </script>
 <body>      
    <form id="Form1" runat=server>
       Here is the custom button.<br>
       <custom:CustomButton runat="server" id="custButton"          onclick="custButton_Click" /> 
       <br>
       <br>
       <asp:TextBox id = "TextBox" Text="Click the button"
        Width = "200" BackColor="Cyan" runat="server" /> 
       <br>      
    </form>         
  </body>          
</html>

Vedere anche

Concetti

Cenni preliminari sulla sintassi delle pagine Web ASP.NET