Creare un web custom control - Parte 6
Eventi
Per completare il controllo è necessario dotarlo della capacità, in corrispondenza del click su una voce di menu, di generare un evento lato client che scateni l'esecuzione di codice lato server.
La sequenza di operazioni che porta al raise di un evento all'interno dell'architettura ASP.NET è la seguente:
Decidiamo di chiamare il nostro evento con il nome di MenuChangeHandler, nel codice C# è necessario quindi dichiararlo:
All'interno della classe dichiariamo il delegate MenuChange:
E inseriamo il codice di risposta all'evento:
La nostra nuova classe Menu.cs può essere visualizzata cliccando qui.
La sequenza di operazioni che porta al raise di un evento all'interno dell'architettura ASP.NET è la seguente:
- javascript, in genere in risposta ad un evento DHTML, invoca la funzione __doPostBack con due argomenti: eventTarget con il nome del controllo che ha generato l'evento e eventArgument come variabile dove inserire dei parametri aggiuntivi.
- a questo punto l'esecuzione del comando è presa in carico dalle librerie javascript di ASP.NET che provvedono a passare i dati al server tramite un normale postback con ricaricamento della pagina in un tradizionale progetto ASP.NET o tramite la classe XMLHttpRequest nei progetti che ricorrono ad Ajax.
- il server elabora la richiesta eseguendo il codice necessario compreso il codice corrispondente all'evento e risponde al client rinviando i dati in formato XML oppure HTML a seconda che si stia lavorando in Ajax o meno.
- In un progetto Ajax è ancora la libreria ASP.NET client ad elaborare la risposta e ad aggiornare l'aspetto della pagina, in un progetto tradizionale è il browser che esegue il rendering della pagina.
Decidiamo di chiamare il nostro evento con il nome di MenuChangeHandler, nel codice C# è necessario quindi dichiararlo:
public delegate void MenuChangeHandler(object sender, int e);
All'interno della classe dichiariamo il delegate MenuChange:
public event MenuChangeHandler MenuChange;
E inseriamo il codice di risposta all'evento:
public void RaisePostBackEvent(string
{
if (MenuChange != null)
MenuChange(this, Convert.ToInt16(eventArgument));
}
{
if (MenuChange != null)
MenuChange(this, Convert.ToInt16(eventArgument));
}
La nostra nuova classe Menu.cs può essere visualizzata cliccando qui.
Nessun commento:
Posta un commento