Antonio Feliziani
a- a+

UserControls

Gli UserControls (da questo momento in poi U.C.) di ASP.NET rappresentano un insieme di controlli Server o elementi statici HTML; il loro utilizzo consente di semplificare ed allo stesso tempo rendere più modulare lo sviluppo di Web Applications.

La differenza tra gli U.C. ed i controlli tradizionali è notevole: i primi possono essere modificati i secondi sono dei Controlli Server tradizionali compilati in DLL 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 progetto correntemente 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 essere interpretate come controlli generati dell’utente e non come pagine ASP.NET tradizionali.

Al codice HTML file .ascx verrà aggiunta la seguente stringa:

    <%@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 di stile (o altri elementi) inclusi nel WebForm principale.

Inseriamo lo User Control all'interno di una pagina

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

-

trascinare il file .ascx presente nel “Solution Explorer” all’interno della pagina .aspx desiderata

L’aspetto effettivo della pagina non verrà modificato con l’inserimento del controllo, ma verrà visualizzato semplicemente un oggetto grafico indicate il nome dello UserControl; questo vuol dire che sarà necessario eseguire la pagina per visualizzare correttamente il layout creato.

s

Aggiungendo il controllo all’interno della nostra pagina, il codice HTML del WebForm verrà aggiornato automaticamente con l’inserimento della direttiva register 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 differenti impostazioni 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 mostrato come è possibile accedere alla proprietà messe a disposizione da uno U.C.

Secondo esempio:

In questo esempio vedremo come gestire un sistema di autenticazione 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 presenti in uno U.C e dichiarati come protected non è possibile utilizzare:

                    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 verifica sui dati che vengono comunicati ai Web Control presenti nello U.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 casi in cui la struttura di determinate Web Applications è particolarmente complessa e risulta necessario organizzarla in moduli di più facile gestione.





Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Marcello
Ti è piaciuto l'articolo?