ASP.NET è stato pensato per creare applicazioni web ed una delle caratteristiche importanti di queste applicazioni, che ritroviamo nelle classiche applicazioni per windows, è il fatto di essere guidate dagli eventi: se io eseguo una determinata operazione come cliccare su un bottone o selezionare un elemento in un menu a tendina, questo è un evento che mi causa l'esecuzione di una parte del programma.
Per aumentare l'interattività delle pagine web in questa direzione sono state pensate tecnologie di scripting lato client come Javascript e Dhtml o lato server come asp, php, jsp. Queste tecnologie offrono in alcuni casi delle soluzioni molto valide ma presentano comunque delle limitazioni, era necessario pensare a qualcosa di innovativo. Vediamo quindi come ASP.NET introduce delle innovazioni estremamente importanti partendo da un esempio in cui creeremo una pagina web contenente 3 server controls che interagiscono tra loro.
<script language="C#" runat="server">
void Button1_Click(Object sender, EventArgs e)
{
Label1.Text = TxtNome.Text + "... Bel nome!";
}
</script>
<html>
<body>
<form runat="server">
Dimmi chi sei:
<asp:textbox runat="server" id="TxtNome"
/><p>
<asp:button runat="server" id="Button1"
Text="Dimmelo!" OnClick="Button1_Click"/>
<p>
<asp:label runat="server" id="Label1" />
</form>
</body>
</html>
Ricordiamoci di salvare il file con l'estensione .aspx e mettiamolo in una cartella del nostro web server.
In questo listato abbiamo messo tre server controls: una textbox, un bottone ed una etichetta (label). Per tutti e tre abbiamo specificato l'attributo runat="server" che è necessario per poter fare interazioni lato server e poi abbiamo assegnato un id ad ognuno che ci serve per poter richiamare l'oggetto in fase di scrittura del codice vero e proprio. Ogni control che mettiamo in una pagina è di fatto un oggetto con cui posso interagire. Il bottone Button1 ha anche il metodo onClick che invoca la "funzione" (più propriamente detta event handler) Button1_click che abbiamo descritto nella sezione <script>.
Questa funzione ha una unica riga in cui si specifica quale deve essere il testo dell'etichetta Label1. Un elenco dei metodi disponibili per ogni control lo possiamo trovare nella documentazione del framework.
Nel primo esempio l'evento era invocato dal clic su un bottone, esistono però altri eventi legati, ad esempio, al caricamento della pagina:
void Page_Load(Object sender, EventArgs e)
{
// Esegue questo codice quando la pagina viene caricata
// Solo se la funzione si chiama Page_Load
}
In questo secondo esempio il codice contenuto tra le parentesi viene
eseguito ogni volta che la pagina viene visitata.