Condividi tramite


Cenni preliminari sui controlli utente ASP.NET

Aggiornamento: novembre 2007

In alcuni casi, potrebbero essere necessarie in un controllo funzionalità non fornite dai controlli server Web ASP.NET incorporati. In questi casi, è possibile creare controlli personalizzati. Sono disponibili due opzioni. È possibile creare:

  • Controlli utente. I controlli utente sono contenitori nei quali è possibile inserire codice e controlli server Web. Successivamente è possibile trattare il controllo utente come un'unità e definire le relative proprietà e metodi.

  • Controlli personalizzati. Un controllo personalizzato è una classe scritta dallo sviluppatore che deriva dal Control o dal WebControl.

I controlli utente sono molto più facili da creare rispetto ai controlli personalizzati, in quanto è possibile riutilizzare i controlli esistenti Inoltre, i controlli utente facilitano la creazione di controlli con elementi complessi dell'interfaccia utente.

In questo argomento viene fornita una panoramica dell'utilizzo dei controlli utente ASP.NET.

Struttura dei controlli utente

Un controllo utente ASP.NET è simile a una pagina Web ASP.NET completa (file ASPX), sia nella pagina dell'interfaccia utente che nel codice. Il controllo utente viene creato con modalità molto simili a quelle con cui si crea una pagina ASP.NET; in seguito, vengono aggiunti il codice e i controlli figlio necessari. Come accade per le pagine, anche un controllo utente può includere codice per modificare i propri contenuti, compresa l'esecuzione di attività quali l'associazione dati.

I controlli utente si differenziano da una pagina Web ASP.NET nei seguenti modi:

  • L'estensione del nome file del controllo utente è ASCX.

  • Al posto di una direttiva @ Page, il controllo utente contiene una direttiva @ Control che definisce la configurazione e altre proprietà.

  • I controlli utente non possono essere eseguiti come file autonomi. Pertanto, è necessario aggiungerli alle pagine ASP.NET, come per qualsiasi altro controllo.

  • Nel controllo utente non sono presenti elementi html, body o form, che devono invece trovarsi nella pagina che contiene il controllo.

In un controllo utente, è possibile utilizzare gli stessi elementi HTML (ad eccezione degli elementi html, body o form) e controlli Web utilizzati in una pagina Web ASP.NET. Ad esempio, se si crea un controllo utente da utilizzare come barra degli strumenti, sarà possibile inserire una serie di controlli server Web Button nel controllo e creare gestori eventi per i pulsanti.

Nell'esempio seguente viene illustrato un controllo utente che implementa una casella di selezione, all'interno della quale è possibile selezionare i pulsanti di scorrimento verso l'alto e verso il basso per scorrere una serie di scelte in una casella di testo.

Nota sulla sicurezza:

L'esempio include una casella di testo che accetta l'input dell'utente e rappresenta quindi una potenziale minaccia alla sicurezza. Per impostazione predefinita, le pagine Web ASP.NET verificano che l'input dell'utente non includa script o elementi HTML. Per ulteriori informazioni, vedere Cenni preliminari sugli attacchi tramite script.

<%@ Control Language="VB" ClassName="UserControl1" %>
<script >
    Protected colors As String() = {"Red", "Green", "Blue", "Yellow"}
    Protected currentColorIndex As Integer = 0
    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs)
        If IsPostBack Then
            currentColorIndex = CInt(ViewState("currentColorIndex"))
        Else
            currentColorIndex = 0
            DisplayColor()
        End If
    End Sub
    
    Protected Sub DisplayColor()
        textColor.Text = colors(currentColorIndex)
        ViewState("currentColorIndex") = currentColorIndex.ToString()
    End Sub

    Protected Sub buttonUp_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs)
        If currentColorIndex = 0 Then
            currentColorIndex = colors.Length - 1
        Else
            currentColorIndex -= 1
        End If
        DisplayColor()
    End Sub
    
    Protected Sub buttonDown_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs)
        If currentColorIndex = colors.Length - 1 Then
            currentColorIndex = 0
        Else
            currentColorIndex += 1
        End If
        DisplayColor()
    End Sub
</script>
<asp:TextBox ID="textColor"  
    ReadOnly="True" />
<asp:Button Font-Bold="True" ID="buttonUp"   
    Text="^" OnClick="buttonUp_Click" />
<asp:Button Font-Bold="True" ID="buttonDown"  
    Text="v" OnClick="buttonDown_Click" />
<% @ Control Language="C#" ClassName="UserControl1" %>
<script >
    protected int currentColorIndex;
    protected String[] colors = {"Red", "Blue", "Green", "Yellow"};
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            currentColorIndex = 
                Int16.Parse(ViewState["currentColorIndex"].ToString());
        }
        else
        {
            currentColorIndex = 0;
            DisplayColor();
        }
    }
    
    protected void DisplayColor()
    {
        textColor.Text = colors[currentColorIndex];
        ViewState["currentColorIndex"] = currentColorIndex.ToString();
    }
    
    protected void buttonUp_Click(object sender, EventArgs e)
    {
        if(currentColorIndex == 0)
        {
            currentColorIndex = colors.Length - 1;
        }
        else
        {
            currentColorIndex -= 1;
        }
        DisplayColor();
    }

    protected void buttonDown_Click(object sender, EventArgs e)
    {
        if(currentColorIndex == (colors.Length - 1))
        {
            currentColorIndex = 0;
        }    
        else
        {
            currentColorIndex += 1;
        }
        DisplayColor();
    }
</script>
<asp:TextBox ID="textColor"  
    ReadOnly="True" />
<asp:Button Font-Bold="True" ID="buttonUp"  
    Text="^" OnClick="buttonUp_Click" />
<asp:Button Font-Bold="True" ID="buttonDown"  
    Text="v" OnClick="buttonDown_Click" />

Si noti che il controllo utente è molto simile a un pagina ASP.NET, ovvero contiene diversi controlli (un controllo TextBox e due controlli Button) e codice che gestisce gli eventi Click dei pulsanti e l'evento Load della pagina. Tuttavia, il controllo non contiene alcun codice, ad eccezione dei controlli, e al posto di una direttiva @ Page, contiene una direttiva @ Control.

Aggiunta di un controllo utente a una pagina

È possibile aggiungere un controllo utente a una pagina registrandolo sulla pagina host. In fase di registrazione, specificare il file ASCX contenente il controllo utente, un prefisso del tag e un nome del tag che sarà utilizzato per dichiarare il controllo utente sulla pagina. Per informazioni, vedere Procedura: includere un controllo utente in una pagina Web ASP.NET.

Definizione delle proprietà e dei metodi per un controllo utente

È possibile definire le proprietà e i metodi per un controllo utente nello stesso modo in cui vengono definiti per una pagina. Quando viene definita una proprietà per un controllo utente, diventa possibile impostarne le proprietà in modo dichiarativo e in codice.

Eventi nei controlli utente

Quando un controllo utente contiene controlli server Web, è possibile scrivervi codice per la gestione degli eventi generati dai controlli figlio. Ad esempio, se il controllo utente contiene un controllo Button, è possibile creare nel controllo utente un gestore per l'evento Click del pulsante.

Per impostazione predefinita, gli eventi generati dai controlli figlio in un controllo utente non sono disponibili nella pagina host. Tuttavia, è possibile definire gli eventi per il controllo utente e generarli in modo che alla pagina host venga inviata una notifica dell'evento. È possibile eseguire questa operazione nello stesso modo in cui si definiscono gli eventi per qualsiasi classe. Per ulteriori informazioni, vedere Generazione di un evento.

Riferimenti a risorse esterne

Quando si esegue un controllo utente, i riferimenti a risorse esterne, quali immagini o ancoraggi ad altre pagine, vengono risolti tramite l'URL del controllo utente come URL di base. Ad esempio, se il controllo utente contiene un controllo Image la cui proprietà ImageUrl è impostata su Images/Button1.gif, l'URL dell'immagine verrà aggiunto all'URL del controllo utente per risolvere il percorso completo dell'immagine. Se il controllo utente fa riferimento a una risorsa non contenuta in una sottocartella del controllo utente stesso, è necessario specificare un percorso che si risolve nella cartella corretta in fase di esecuzione. Per ulteriori informazioni sulla specificazione dei percorsi per i controlli server ASP.NET, vedere Percorsi del sito Web ASP.NET .

Inserimento nella cache e controlli utente

I controlli utente possono supportate le direttive di inserimento nella cache separate dalla pagina host. Pertanto, è possibile aggiungere i controlli utente alle pagine e a porzioni di cache di una pagina. Per informazioni, vedere Memorizzazione nella cache di parti di una pagina ASP.NET.

Vedere anche

Altre risorse

Controlli utente ASP.NET