Propagare un evento al controllo padre nei Custom Control

di Daniele Bochicchio, in ASP.NET 2.0, Custom Control,

Durante lo sviluppo di custom control è spesso necessario propagare un evento all'interno di un controllo contenuto in quest'ultimo al contenitore, che spesso è la pagina, per gestirne lo stato.
Comunemente in questi casi si parla di Event Bubbling, cioè della propagazione dell'evento attraverso la gerarchia dei controlli con cui ASP.NET compone la pagina.

Questa tecnica può essere ovviamente anche utilizzata negli User Control, che sono di fatto una variante di Custom Control caratterizzati dall'avere il markup.

Ad ogni modo, per propagare un controllo al padre, è necessario richiamare il metodo RaiseBubbleEvent, inviando il riferimento al controllo che sta scatenando l'evento ed eventuali argomenti, che attraverso un EventArgs di tipo personalizzato può contenere anche informazioni aggiuntive:

public class MyControl:Control
{
   protected override void OnMyEvent(EventArgs e) 
   {
      base.MyEvent(e);

      // invio dell'evento
      RaiseBubbleEvent(this, e);
   }
}

Non è possibile sovrascrivere il metodo RaiseBubbleEvent, per questo motivo per gestire gli eventi è necessario intercattare l'evento OnBubbleEvent sul controllo contenitore e poi verificare quale evento si è effettivamente scatenato, gestendo la situazione in maniera opportuna, come si può leggere nello script #919.

Questo approccio si differenzia da quello che prevede l'aggiunta di un evento al controllo contenitore che funga da collegamento con il controllo contenuto in quanto funziona anche all'interno di controlli basati su template, all'interno dei quali non si può sapere a priori quanti e quali saranno i controlli aggiunti.

Approfondimenti


#919 - Gestione degli eventi in un Composite Control per ASP.NET 2.0
https://www.aspitalia.com/script/919/Gestione-Eventi-Composite-Control-ASP.NET-2.0.aspx

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi