asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 8938
ASPCode.it - Store

  > > Articoli

Web Form e Server Control

Data di pubblicazione: 10/03/2003        Voto della community: 3,67 (Votanti: 2)


ASP.NET è una piattaforma di sviluppo unitaria che fornisce i servizi necessari agli sviluppatori per costruire applicazioni Web a livello di impresa. ASP.NET fornisce inoltre un nuovo modello di programmazione e infrastruttura che consente una nuova potente classe di applicazioni. ASP.NET è un ambiente basato su .NET compilato; è possibile scrivere applicazioni in uno qualsiasi dei linguaggi compatibili con .NET, inclusi Visual Basic, C# e JScript. Inoltre, l'intero Framework .NET è disponibile da qualsiasi applicazione ASP.NET. Gli sviluppatori possono accedere facilmente ai vantaggi di queste tecnologie, inclusi l' ambiente managed Common Language Runtime, sicurezza dei tipi, ereditarietà e così via.

I Web Form consentono di costruire potenti pagine web basate su form. Costruendo queste pagine, è possibile usare i server control di ASP.NET per crare elementi visuali comuni e programmarli per compiti comuni. Questi controlli consentono di costruire rapidamente un Web Form a partire da componenti predefiniti o da componenti personalizzati, semplificando il codice di una pagina.

Gli esempi a cui faremo riferimento richiedono l'esistenza di una directory virtuale chiamata 'myweb' su IIS 5.0 in esecuzione su localhost. Le pagine che creeremo vanno salvate in tale directory. La nostra prima pagina ASP.NET (simplehello.aspx) accetta il nome dei visitatori in un textbox e dice loro 'Hello'.


<%@ Page Language="C#" %>

<html>

<head>

<title>simplehello.aspx</title>

</head>

<body>

<center>

<form>

<b>Name:</b> <input name="myname">

<input type="submit" value="Submit">

</form>

<%

  string name = Request.QueryString["myname"];

  if(name != null){

      if(name =="") name = "Visitor";

%>


<h1>Hello <%=name%></h1>

<%}%>

</center>

</body>

</html>


    Guardate il risultato chiamando la pagina: http://localhost/myweb/simplehello.aspx

La pagina comincia con una direttiva di pagina che identifica il linguaggio usato per lo scripting server-side. Il codice C# è racchiuso tra <% ... %>. ASP.NET offre dei server control che rendono lo sviluppo di una interfaccia basata su web semplice come quello di una tipica interfaccia grafica utente. La nostra prossima pagina (webfrmhello.aspx) funziona come la precedente usando invece dei server control.


<html>

<head>

<title>webfrmhello.aspx</title>

<script language="C#" runat = "server">

            private void SubmitBtn_Click(object sender, EventArgs ev){

                        string name = NameTxt.Text;

                        if(name == "") name = "Visitor";

                        HelloLbl.Text = "Hello "+name;

            }

</script>

</head>

<body>

<center>

<form runat="server">

<b>Name:</b>

  <asp:TextBox id="NameTxt" runat = "server" />

  <asp:Button Text="Submit" OnClick="SubmitBtn_Click" runat="server" />

</form>

<h1><asp:label id="HelloLbl" runat="server" /></h1>

</center>

</body>

</html>

I server control sono inseriti usando i tag lato server:

    <TagPrefix:NomeControllo id = "UnIdDaAssegnareAquestoControllo" … RunAt="Server" />

Nota: la gestione degli eventi per i server control è qualcosa di simile alla gestione degli eventi nei controlli Windows Form.


Gli sviluppatori possono anche sviluppare server control personalizzati detti Custom (Web) Control. La classe di un Custom Control deve ereditare dalla classe System.Web.UI.Control. ASP.Net disegnerà il controllo tramite l'invocazione del suo metodo Render che puo' essere overridden. Di seguito un semplice custom web control (mywebctl) che visualizza il valore della sua proprietà 'text' con i colori dell'arcobaleno.

using System;

using System.Web;

using System.Web.UI;

using System.Drawing;



namespace MyWebControls{

    public class RainbowLabel:Control{

          private static Color[] colors = {Color.Violet, Color.Indigo, Color.Blue, Color.Green, Color.Orange, Color.Red};

          private string _text;

          public string Text{

              get{return _text;}

              set{_text = value;}

          }

          private static string ToHtml(Color c){

                return "#"+c.R.ToString("X2")+c.G.ToString("X2")+c.B.ToString("X2");

          }

          protected override void Render(HtmlTextWriter page){

                if(_text == null) return;

                int col = 0;       

                foreach(char ch in _text){

                    if(Char.IsWhiteSpace(ch))page.Write(ch);

                    else{

                        page.Write("<font color='{0}'>{1}</font>",ToHtml(colors[col]),ch);

                        if(++col == 7)col=0;

                    }

              }

          }

    }

}

Compilate ora mywebctl in maniera da creare una dll (n.d.T. Dalla Shell digitare csc /t:library mywebctl.cs; il parametro /t:library dice infatti al compilatore di compilare il file .cs come dll) e mettete questa dll nella directory bin che avremo creato all'interno della directory virtuale. Di seguito riportiamo una pagina ASP.NET (myctltest.aspx) che dimostra come registrare e usare il controllo che abbiamo appena creato.
Notare come la proprietà Text di HelloLbl è settata come espressione data-binding tramite la sintassi <%# .. %> .Questo tipi di espressioni sono risolte solo quando è invocato il metodo Databind().


<%@ Register TagPrefix="My" Namespace="MyWebControls" Assembly="mywebctl"%>


<html>

<head>

<title>MyCtlTest.aspx</title>

<script language="C#" runat="server">

            private void GoBtn_Click(object sender,EventArgs ev){

                        DataBind(); // resolve all data-binding expressions in the current page

            }

</script>

<head>

<body><center>

<form runat="server">

            <b>Name:</b>

            <asp:TextBox id="NameTxt" runat="server"/>

            <asp:Button Text="GO!" onclick="GoBtn_Click" runat="server"/>

</form>

<h1><my:RainbowLabel id="HelloLbl" Text=<%# NameTxt.Text %> runat="server"/></h1>

</center>

</body>

</html>



Un altro metodo per creare controlli server personali è attraverso le 'pagelet' (N.d.T. I controlli server personali così realizzati sono anche detti User Web Control in contrapposizione ai Custom Web Control sopra analizzati). Una pagelet è essa stessa una pagina ASP.NET che puo' essere inserita all'interno di altre pagina come un controllo. Le pagelet sono memorizzate in file on estenzione ascx. Di seguito una pagelet (login.ascx) che genera un form per il login e espone le proprietà UserID e Password.


<script language="C#" runat="server">

            public String UserId {

                        get {

                                    return UsrTxt.Text;

                        }

            }

            public String Password {

                        get {

                                    return PwdTxt.Text;

                        }

            }

</script>

<table border="0" bgcolor="#c9c9c9">

<tr>

<td><b>Customer ID: </b></td>

<td>

<form runat="server">

<asp:TextBox id="UsrTxt" runat="server"/>

<asp:RequiredFieldValidator ControlToValidate="UsrTxt" Display="Dynamic" ErrorMessage="*" runat="server"/>

</td>

</tr>

<tr>

<td><b>Password: </b></td>

<td>

<asp:TextBox id="PwdTxt" TextMode="Password" runat="server"/>

<asp:RequiredFieldValidator ControlToValidate="PwdTxt" Display="Dynamic" 

            ErrorMessage="*" runat="server"/>


</td></tr>

<tr align="center">

<td colspan="2">

<asp:Button id="SubmitBtn" Text="Login" runat="server"/>

</form>

</td></tr>

</table>

La pagina di sopra usa anche dei 'Validator control': se un utente lascia vuoto un campo, RequiredFieldValidator visualizzerà il testo specificato per ErrorMessage.

N.d.T. Le pagine ascx non sono eseguibili direttamente ma si limitano a creare il controllo (User Web Control), pertanto non contengono tag <body> <head>. Per utilizzare il controllo così creato, creiamo una pagina aspx provaUserWebControl del genere:

<%@ Register TagPrefix="UserWebControls" tagname="PrimoUserWebControl" Src="login.ascx"%>
<html>
<head>
<title>provaWebUserControl.aspx</title>

<body>
<center>
<UserWebControls:PrimoUserWebControl ID="unId" runat="server" />
</center>

</body>
</html>

Osserviamo la direttiva per registrare il controllo creato nel file ascx :

<%@ Register TagPrefix="UserWebControls" tagname="PrimoUserWebControl" Src="login.ascx"%>

e confrontiamola con quella usata per registrare il Custom Web Control prima creato :

<%@ Register TagPrefix="My" Namespace="MyWebControls" Assembly="mywebctl"%>

Come si vede al posto del tag Assembly è usato il tag Src seguito dall'indirizzo della pagina ascx; inoltre al posto di Namespace troviamo tagname; i nomi usati per il tagprefix e per il tagname servono a identificare in maniera univoca il controllo da registrare, che richiameremo nel body della pagina con :

<UserWebControls:PrimoUserWebControl ID="unId" runat="server" />

cioé il nome specificato per il TagPrefix seguito dai : e dal nome specificato per TagName.



(Traduzione di Maurizio Ferrera)


Si ringrazia K.M.Hussain per la gentile concessione dell'articolo.




Utenti connessi: 8938