Antonio Feliziani
a- a+

UserControls

Gli UserControls (da questo momento in poi U.C.) di ASP.NETrappresentano un insieme di controlli Server o elementistatici HTML; il loro utilizzo consente di semplificare edallo stesso tempo rendere più modulare lo sviluppo diWeb Applications.

La differenza tra gli U.C. ed i controlli tradizionaliè notevole: i primi possono essere modificati isecondi sono dei Controlli Server tradizionali compilati inDLL e non modificabili.

Creiamo il nostro primo User Control

Per creare uno U.C. utilizzando Visual Studio:

1 cliccare col pulsante destro del Mouse nel“Solution Explorer” del progettocorrentemente in uso

2

selezionare “Add New Item” e scegliere“Web User Control”

s

selezionare "Add New Item"

 

s

scegliere "Web User Control"

Verrà aggiunto un file .ascx al nostro progetto;l’estensione .ascx è utilizzata dal Framework.NET per identificare le pagine che devono essereinterpretate come controlli generati dell’utente e noncome pagine ASP.NET tradizionali.

Al codice HTML file .ascx verrà aggiunta la seguentestringa:

    <%@control Language="c#" description="testo" ... %>

E’ importante sottolineare che il codice HTML del file.ascx non presenta il tag <BODY> in quanto verràutilizzato il Body del WebForm nel quale lo U.C. verràposizionato; verranno inoltre inclusi anche tutti i fogli distile (o altri elementi) inclusi nel WebForm principale.

Inseriamo lo User Control all'interno di una pagina

Ogni U.C., per essere utilizzato, deve essere inclusoall’interno di una pagina .aspx:

-

trascinare il file .ascx presente nel “SolutionExplorer” all’interno della pagina .aspxdesiderata

L’aspetto effettivo della pagina non verràmodificato con l’inserimento del controllo, maverrà visualizzato semplicemente un oggetto graficoindicate il nome dello UserControl; questo vuol dire chesarà necessario eseguire la pagina per visualizzarecorrettamente il layout creato.

s

Aggiungendo il controllo all’interno della nostrapagina, il codice HTML del WebForm verrà aggiornatoautomaticamente con l’inserimento della direttivaregister per la registrazione dello U.C.:

    <%@ Register TagPrefix="MioControllo" TagName="Menu" Src="Menu.ascx" %>

-

l’attributo TagPrefix indica il prefisso per identificare ed utilizzare lo U.C. all’interno della pagina; definisce quindi il namespace nel quale il controllo dovrà “vivere”. Sarà quindi possibile avere controlli con lo stesso nome ma con un prefisso differente che potranno coesistere nella medesima pagina.

-

l’attributo TagName specifica il nome del controllo e dovrà essere unico per tutto il namespace

-

l’attributo Src indica la posizione del file .ascx; è possibile utilizzare path virtuali come ad esempio “mioUserControl.ascx” oppure “/path/mioUserControl.ascx” ma non è possibile utilizzare path fisici del tipo “C:pathmioUserControl.ascx”.

In seguito alla registrazione dello controllo saràpossibile utilizzare infinite istanze dello stesso U.C.(utilizzando gli appositi tags) e definire differentiimpostazioni per le proprietà di ogni singola istanza,come se si trattasse di un tradizionale Server Control.

Alcuni esempi pratici...

Primo esempio:

Pagina controllo.ascx

  <script language="VB" runat="server">   Public Color As String = "black"   Public Text As String = "Semplice esempio di User Control!"</script><font color="<%= Color %>"><%= Text %></font>


 

Pagina pagina.aspx

  <%@ Page Language="VB" %><%@ Register TagPrefix="MioUC" TagName="Testo" Src="controllo.ascx" %><script language="VB" runat="server">   Sub Page_Load(Sender As Object, E As EventArgs)UserCtrl.Color = "green"UserCtrl.Text = "Seconda modifica!"   End Sub</script><html><head><title>Esempio di User Control</title></head><body bgcolor="#FFFFFF"><MioUC:Testo runat="server" /> <br><br><MioUC:Testo Color="red" Text="Prima modifica!" runat="server" /> <br><br><MioUC:Testo id="UserCtrl" runat="server" /> <br><br></body></html>

 

s

Attraverso questo semplice esempio è stato mostratocome è possibile accedere alla proprietà messea disposizione da uno U.C.

Secondo esempio:

In questo esempio vedremo come gestire un sistema diautenticazione utilizzando uno U.C.

Pagina login.ascx

  <script language="C#" runat="server">public String PaginaOK ="/Default.aspx";public int chk;bool Authenticate(String user, String pass) {bool authenticated = false;try {   // connessione al DataBase   // SQLConnection Conn = ...   String sSQL = "SELECT login,password FROM Utenti where login='" + user.Trim() + "'";   SQLCommand Cmd = new SQLCommand(sSQL,Conn);   SQLDataReader myRead=null;   Conn.Open();myRead = Cmd.ExecuteReader(); if (myRead!=null){   if (myRead.Read()) {if (myRead.GetString(0)==user){   if(myRead.GetString(1)==pass){authenticated =true;   } else {   // password errata   chk=1;   }} else {   // nome utente errato   chk=2; }     }   } }catch(Exception e) {Response.Write("Auth Exception: " + e.ToString()); }return authenticated;}private void SubmitBtn_Click(Object sender, EventArgs e) {  if (Authenticate(utente.Text, password.Text)) {    // login avvenuto con successo!    Response.Redirect(PaginaOK);  } else {    if (chk==1){Controllo.Text= "Password errata!";Controllo.Visible = true;    } else{Controllo.Text= "Nome utente errato!";Controllo.Visible = true;    }  }}</script>Nome Utente: <asp:Textbox id=utente size=20 runat=server />Password: <asp:Textbox id=password size=20 runat= server /><asp:Button id=click text="Accedi!" onclick=SubmitBtn_Click runat=server /><asp:label id=Controllo visibality=false runat=server /></asp:label>

 

Pagina login.aspx

  <%@ Register TagPrefix="UCLogin" TagName="Login" Src="login.ascx" %><html><body><form runat="server">  <UCLogin:Login id="MyLogin" runat="server"/></form></body></html>


 

Approfondimenti

Per accedere, da una pagina .aspx, ai Web Controls presentiin uno U.C e dichiarati come protected non è possibileutilizzare:

  myWebControl.Text = "testo"

 

in questi casi, per interagire con i Web Controls, ènecessario utilizzare le apposite property create nello U.C.per dare accesso a specifici oggetti protetti:

  <script language="C#" runat="server">public String UserId {  get {    return User.Text;  }  set {    User.Text = value;  }}public String Password {  get {    return Pass.Text;  }  set {    Pass.Text = value;  }}</script>

 

questa soluzione consente inoltre di effettuare una verificasui dati che vengono comunicati ai Web Control presenti nelloU.C.:

  <script language="C#" runat="server">public String UserId {  get {    return User.Text;  }  set {  if (value.Length!=0)    User.Text = value;  else    User.Text = "Inserire un valore...";  }}</script>

Conclusioni

Gli User Control si rivelano particolarmente utili nei casiin cui la struttura di determinate Web Applications èparticolarmente complessa e risulta necessario organizzarlain moduli di più facile gestione.