Modifica delle proprietà dei controlli utente

Una volta creato un controllo utente e dopo averne specificato le proprietà, è possibile modificare i valori di tali proprietà sia in modo dichiarativo che a livello di programmazione dalla pagina contenente il controllo utente. È inoltre possibile utilizzare queste tecniche quando si aggiungono controlli utente ad altri controlli utente. Tale procedura è denominata nidificazione.

Per modificare i valori delle proprietà dei controlli utente in modo dichiarativo

  • Dichiarare il nome della proprietà del controllo utente e un valore come coppia attributo/valore nel tag del controllo utente. Nell'esempio riportato di seguito, Color e Text sono proprietà di un'istanza del controllo utente creata dal tag del controllo server personalizzato Acme:Login. La proprietà Color è impostata su blue e Text su This is a sample.

    <Acme:Login Color="blue" Text="This is a sample." Runat="server" />
    

Per modificare i valori delle proprietà dei controlli utente a livello di programmazione

  1. Creare un controllo utente dotato di proprietà e un controllo server ASP.NET o un elemento HTML per visualizzare i valori delle proprietà. Nell'esempio seguente un elemento <span> viene utilizzato per visualizzare i valori delle proprietà Color e Text.

    <script runat="server">
        Public Color As String = "blue"
        Public Text As String = "This is a simple message user control!"  
    </script>
    
    <span id="Message" style="color:<%=Color%>"><%=Text%></span>
    [C#]
    <script language="C#" runat="server">
        public String Color = "blue";
        public String Text = "This is a simple message user control!";
    </script>
    
    <span id="Message" style="color:<%=Color%>"><%=Text%></span>
    
  2. Registrare il controllo utente nella pagina o nel controllo utente che lo contiene mediante una direttiva @ Register, definendo gli attributi tagname e tagprefix del controllo utente, oltre al percorso del file del controllo utente. Per informazioni sull'inclusione a livello di programmazione di un controllo utente in una pagina o in un altro controllo utente, vedere Creazione di istanze di controlli utente a livello di programmazione.

  3. Nel blocco della dichiarazione di codice della pagina creare codice che consenta di modificare le proprietà del controllo utente.

  4. Nel corpo della pagina o del controllo utente contenitore includere eventuali altri controlli server ASP.NET che si desidera che prendano parte alla modifica delle proprietà del controllo utente. È ad esempio possibile includere un controllo server Web DropDownList o un controllo server HtmlSelect da cui selezionare colori per la modifica di una proprietà Color.

    Nell'esempio seguente viene illustrata la modifica da parte di una pagina del controllo utente introdotto nel primo passaggio.

    <%@ Register TagPrefix="Acme" TagName="Message"    Src="simpleusercontrol.ascx" %>
    
    <html>
    
        <script language="VB" runat="server">
            Sub SubmitBtn_Click(sender As Object, E As EventArgs)
                MyMessage.Text = "Message text changed!"
                MyMessage.Color = "red"
            End Sub 'SubmitBtn_Click
        </script>
        <body style="font: 10pt verdana">
            <h3>A Simple User Control w/ Properties</h3>
            <form runat="server">
                <Acme:Message id="MyMessage" Text="This is a custom message!" Color="blue" runat="server"/>
                <p>
                <asp:button text="Change Properties" OnClick="SubmitBtn_Click" runat=server/>
    
            </form>
        </body>
    </html>
    [C#]
    <%@ Register TagPrefix="Acme" TagName="Message"    Src="simpleusercontrol.ascx" %>
    
    <html>
    
        <script language="C#" runat="server">
                void SubmitBtn_Click(Object sender, EventArgs E) {
                        MyMessage.Text = "Message text changed!";
                        MyMessage.Color = "red";
                }
        </script>
    
    <body style="font: 10pt verdana">
        <h3>A Simple User Control w/ Properties</h3>
        <form runat="server">
            <Acme:Message id="MyMessage" Text="This is a custom message!" Color="blue" runat="server"/>
            <p>
            <asp:button text="Change Properties" OnClick="SubmitBtn_Click" runat=server/>
    
        </form>
    </body>
    </html>
    

Benché la modifica delle proprietà di un controllo utente da una pagina o da un controllo utente dichiarativo presenti numerose analogie alla modifica da una classe di codice sottostante di una pagina o di un controllo utente, sono tuttavia presenti alcune differenze significative. In particolare, se si crea la pagina o il controllo utente contenitore associando a tale pagina o controllo utente una classe di codice sottostante, procedura solitamente adottata dagli sviluppatori che utilizzano lo sviluppo rapido di applicazioni (RAD, Rapid Application Deployment), sarà necessario creare il controllo utente da utilizzare associando anche a tale controllo una classe di codice sottostante, in modo da creare una distinzione netta tra i file di codice e i file utilizzati per il rendering di HTML al client richiedente (file ASPX e ASCX). Per ulteriori informazioni, vedere Sviluppo di controlli utente in un file di codice sottostante.

Nota   Gli esempi riportati di seguito sono versioni modificate degli esempi riportati nella sezione Per modificare i valori delle proprietà dei controlli utente a livello di programmazione. Il codice è stato modificato per l'utilizzo in file di codice sottostante.

Per modificare i valori delle proprietà dei controlli utente a livello di programmazione da un file di codice sottostante

  1. In un file di codice sottostante creare un controllo utente contenente le proprietà che si desidera modificare. Nell'esempio seguente viene utilizzato, con alcune modifiche, il controllo utente semplice della procedura precedente.

    Imports System
    Imports System.Web.UI
    Imports System.Web.UI.HtmlControls
    
    Namespace UserControlTest
        Public Class MyUserControl
            Inherits UserControl
             Public Color As String = "blue"
             Public [Text] As String = "This is a simple message user control!"
        End Class 'MyUserControl
    End Namespace 'UserControlTest
    [C#]
    using System;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    
    namespace UserControlTest {
        public class MyUserControl : UserControl {
            public string Color = "blue";
            public string Text = "This is a simple message user control!";
        }
    }
    
  2. In un file di codice sottostante distinto creare la pagina o il controllo utente contenitore da cui verranno modificati i valori delle proprietà del controllo utente. Per questo esempio il codice viene memorizzato in un file MyPage con estensione di linguaggio appropriata.

    Imports System
    Imports System.Web.UI
    Imports System.Web.UI.WebControls
    Imports UserControlTest
    
    Namespace PageTest
        Public Class MyPage
            Inherits Page
            Public mybutton As Button
            Public MyMessage As MyUserControl
            Public Placeholder As PlaceHolder
    
            Sub Page_Load(sender As [Object], e As EventArgs)
                Dim MyMessage As Control = LoadControl("uc.ascx")
                Placeholder.Controls.Add(MyMessage)
    
                Dim mybutton As New Button()
                mybutton.Text = "Change property values"
                mybutton.OnClick = "SubmitBtn_Click"
                Placeholder.Controls.Add(mybutton)
            End Sub 'Page_Load
    
            Protected Sub SubmitBtn_Click(sender As [Object], e As EventArgs)
                MyMessage.Text = "Message text changed!"
                MyMessage.Color = "red"
            End Sub 'SubmitBtn_Click
        End Class 'MyPage
    End Namespace 'PageTest
    [C#]
    using System;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using UserControlTest;
    
    namespace PageTest {
        public class MyPage : Page {
            public Button mybutton;
            public MyUserControl MyMessage;
            public PlaceHolder Placeholder;
    
            void Page_Load(Object sender, EventArgs e) {
                Control MyMessage = LoadControl("uc.ascx");
                Placeholder.Controls.Add(MyMessage);
    
                Button mybutton = new Button();
                mybutton.Text = "Change property values";
                mybutton.OnClick = "SubmitBtn_Click";
                Placeholder.Controls.Add(mybutton);
            }
    
            protected void SubmitBtn_Click(Object sender, EventArgs e) {
                MyMessage.Text = "Message text changed!";
                MyMessage.Color = "red";
            }
        }
    }
    
  3. Compilare il file di codice sottostante del controllo utente e il file di codice sottostante della pagina o del controllo utente contenitore in assembly. È necessario assicurarsi che la pagina o il controllo utente contenitore disponga di accesso al codice del controllo utente in uso. È possibile compilare i file nella stessa DLL o utilizzare le istruzioni del compilatore riportate di seguito sulla riga di comando, quando si compila la pagina o il controllo utente contenitore. Nell'esempio seguente uc.dll rappresenta il file DLL compilato dal file di origine del controllo utente.

    Nota   Nelle seguenti istruzioni della riga di comando del compilatore si presuppone che si stia effettuando la compilazione dalla directory in cui si trovano i file di origine. Si presuppone inoltre che si stia effettuando la compilazione nella directory \bin. In questo caso la directory \bin è una sottodirectory della directory in cui si trovano i file di origine.

    vbc /r:.\bin\uc.dll /target:library /out:.\bin\p.dll MyPage.vb
    [C#]
    csc /r:.\bin\uc.dll /target:library /out:.\bin\p.dll MyPage.cs
    
  4. Se non è già stato effettuato tale controllo, assicurarsi che tutti i file DLL creati siano memorizzati nella directory \bin dell'applicazione, in modo che sia possibile collegare automaticamente le classi ai relativi file ASPX o ASCX.

  5. Creare i file ASPX e ASCX appropriati. Assicurarsi di includere un controllo server PlaceHolder nel file ASPX. In tale controllo sarà contenuta l'interfaccia utente generata dinamicamente dai controlli dichiarati nella DLL di codice sottostante della pagina. Includere inoltre eventuali elementi HTML necessari per il codice di pagina e controllo utente scritto.

    Nota   In questo caso non utilizzare l'attributo src nelle direttive @ Control e @ Page. Poiché entrambe le classi vengono ereditate da un assembly, è sufficiente utilizzare l'attributo Inherits. Se la pagina e il controllo utente vengono sviluppati in spazi dei nomi, è inoltre necessario includere il nome dello spazio dei nomi nel valore dell'attributo Inherits.

    Nell'esempio seguente vengono riportati il file ASCX per il controllo utente e il file ASPX per la pagina tratti dagli esempi precedenti.

    File ASCX:

    <%@ Control Inherits="UserControlTest.MyUserControl" %>
    <span id="Message" style="color:<%=Color%>"><%=Text%></span>
    

    File ASPX:

    <%@ Import Namespace="PageTest" %>
    <%@ Page language="VB" Inherits="PageTest.MyPage" %>
    <%@ Reference control="uc.ascx" %>
    
    <html>
    
        <body style="font: 10pt verdana">
            <h3>A Simple User Control w/ Properties</h3>
            <form runat="server">
    
                <asp:placeholder id="Placeholder" runat="server" />
    
            </form>
        </body>
    </html>
    [C#]
    <%@ Import Namespace="PageTest" %>
    <%@ Page language="C#" Inherits="PageTest.MyPage" %>
    <%@ Reference control="uc.ascx" %>
    
    <html>
    
        <body style="font: 10pt verdana">
            <h3>A Simple User Control w/ Properties</h3>
            <form runat="server">
    
                <asp:placeholder id="Placeholder" runat="server" />
    
            </form>
        </body>
    </html>
    

Vedere anche

Controlli utente Web Form | Inclusione di un controllo utente in un'altra pagina Web Form | Gestione di eventi server nelle pagine Web Form | Gestione degli eventi dei controlli utente