Da quanto esaminato nella lezione precedente, potremmo enunciare che: «se un controllo esegue postback da un UpdatePanel, si aggiorna solo l'UpdatePanel; se il controllo è esterno all'UpdatePanel si aggiorna la pagina», ma non è sempre così.
Vediamo il caso in cui un evento esterno all'UpdatePanel influenza i componenti al suo interno.
Supponiamo di avere una Label
all'interno di un UpdatePanel, che vogliamo moficare in modalità asincrona, quando clicchiamo su pulsante esterno al pannello. La Web Form conterrà quindi un pulsante, lo ScriptManager
e l'UpdatePanel
con la Label
.
Per ottenere il comportamento desiderato dobbiamo ricorrere ai trigger di ASP.NET AJAX.
Viene considerato "trigger" un evento scatenato da un controllo, ma gestito dall'UpdatePanel. Un controllo quindi può provocare due tipi di trigger: "asincrono" e "PostBack". Nel primo caso il controllo che scatena l'evento non causa il caricamento della pagina, nel secondo caso si.
Prendiamo il nostro UdatePanel
e clicchiamo nella proprietà trigger collection. Qui possiamo inserire un nuovo trigger di tipo asincrono e collegarlo all' evento "click" del pulsante.
A questo punto abbiamo il nostro controllo ASP.NET che esegue un PostBack asincrono. Tramite il suo evento click possiamo andare a modificare tutti i controlli, e quindi i loro attributi, presenti negli UpdatePanel della pagina. Per fare cio andiamo nel file di codice della pagina e inseriamo la routine del listato 4.
Listato 4. Delegato per pulsante invia
// Invio
protected void btnInvia_Click(object sender, EventArgs e)
{
lblRisultato.Text = "Oggi è il: " + Date.Now.ToLongDateString();
lblRisultato.Text += "<br />";
lblRisultato.Text += "Sono le ore: " + Date.Now.ToLongTimeString();
}
In questo modo la pagina aggiorna il valore dell'etichetta ma non esegue un PostBack. Potremmo sfruttare questa caratteristica, per filtrare dei dati in una griglia, per esempio. Nel caso in cui invece impostiamo un trigger di tipo PostBack, il controllo, anche se presente nell'UpdatePanel, eseguirà un richiamo completo della pagina.