La gestione degli eventi ASP.NET è molto simile a quello adottato dalle applicazioni basate su Form. Le classi che definiscono i controlli di una pagina ASP.NET (un pulsante o una casella di selezione, ad esempio) prevedono una serie di eventi che possono essere sottoscritti dalla pagina (classe) in cui vengono visualizzati e a cui possono essere associati dei gestori evento, contenente il codice da eseguire quando si verifica l’evento.

Gli eventi ASP.NET e i controlli server web

L’esempio seguente consiste nell’inserire un controllo Button e associare ad esso il gestore per l’evento clic, utilizzando le funzionalità visuali di Visual Studio:

  1. Creare un nuovo documento di tipo WebForm
  2. Inserire un controllo Button all’interno del documento
  3. Nella finestra delle proprietà, visualizzare gli eventi e poi, fare doppio clic sul nome dell’evento che si intende gestire, oppure fare doppio clic direttamente sul controllo Button per gestire l’evento Click
  4. Nel file con estensione .cs che si apre automaticamente con il doppio clic, scrivere il codice da eseguire quando si verifica l’evento

L’immagine mostra, mostra il codice da inserire all’interno del gestore evento Button1_Click.

Introduzione agli eventi ASP.NET

Introduzione agli eventi ASP.NET

Per associare il gestore evento al controllo Button, Visual Studio aggiunge l’attributo OnClick, seguito dal nome del gestore evento, al marcatore del controllo Button presente nel file con estensione .aspx.

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

Quando si elimina un gestore evento eliminare anche l’attributo corrispondente dal codice di marcatura altrimenti si riceverà un errore di compilazione.

Gli eventi ASP.NET e i delegati

Quando i controlli vengono creati mediante C#, e non attraverso gli elementi di marcatura disponibili nella casella degli strumenti, l’associazione di un gestore evento a un controllo avviene per mezzo di un delegato. In generale, i delegati vengono utilizzati per passare un metodo come argomento di un altro metodo, cioè, come funzione callback.

Anche nel prossimo esempio si aggiungerà un controllo Button e il gestore dell’evento click ma l’associazione tra controllo e gestore avverrà mediante un metodo delegato.

Creare un nuovo documento di tipo WebForm e poi aprire il file con estensione .cs. All’interno del metodo Page_Load(), digitare il codice mostrato nell’esempio.

// Eventi ASP.NET - Esempio 2
protected void Page_Load(object sender, EventArgs e) {
  Button btn1 = new Button(); // Crea il controllo Button
  btn1.Text = "Invia"; // Imposta la proprietà Text

  btn1.Click +=btn1_Click; // Associa il gestore evento
  Page.Form.Controls.Add(btn1); // Aggiunge il controllo alla pagina
}

protected void btn1_Click(object sender, EventArgs e) {
  Response.Write("Codice del gestore evento");
}

Il gestore evento è associato all’evento mediante il delegato seguente.

btn1.Click +=btn1_Click;

L’operatore += sottoscrive l’evento della classe Button per eseguire del codice personalizzato, quando l’evento si verifica. La sottoscrizione di un evento può essere annullata con l’operatore -=.

I delegati in C# possono anche essere dei metodi anonimi, come mostrato nell’esempio 3.

// Eventi ASP.NET - Esempio 3
protected void Page_Load(object sender, EventArgs e) {
  Button btn1 = new Button();
  btn1.Text = "Invia";
  btn1.Click += delegate(object send, EventArgs evt) {
   Response.Write("Codice del gestore evento ");
 };
 Page.Form.Controls.Add(btn1);
}

In questo caso si utilizza la parola chiave delegate per definire il metodo. Gli argomenti passati al delegato devono essere dello stesso tipo di quelli previsti dal gestore evento: il primo di tipo object mentre il secondo è di tipo EventArgs.

Altre informazioni sono disponibili nella documentazione ufficiale.