ASP.NET AJAX 1.0 Server Extensions

3 pagine in totale: <<Indietro 1 2 [3]

Dare feedback: UpdateProgress

Quando si scatena un postback AJAX, il browser rimane fermo, non c'è nulla che indichi all'utente che qualcosa sta avvenendo. Se l'operazione sul server è veloce ed il refresh è immediato, la cosa non crea grossi problemi, ma se si verificano rallentamenti, allora l'utente può perdere la visione di quello che sta succedendo.

Per risolvere questo possibile problema è stato introdotto il controllo UpdateProgress che serve per segnalare all'utente che un aggiornamento è in corso. Questo controllo contiene un template ProgressTemplate il quale specifica il markup da visualizzare.

<asp:UpdateProgress ID="prg" runat="server" DisplayAfter="0">
  <ProgressTemplate>
    <div style="left:0; top:0; position:absolute">Aggiornamento in corso</div>
  </ProgressTemplate>
</asp:UpdateProgress>

In questo controllo è molto importante la proprietà DisplayAfter che specifica dopo quanto tempo (in millisecondi) l'UpdateProgress viene visualizzato. Questa impostazione si rivela particolarmente utile nel caso di operazioni veloci; in questi casi si può mettere un valore elevato (per esempio, 1000 millisecondi) in modo tale che l'utente veda direttamente il risultato senza alcun messaggio di aggiornamento intermedio. Per operazioni piuttosto lente si può decidere di impostare il valore a zero rendendo così visibile il messaggio fin da subito.

Così come ci possono essere più UpdatePanel, in una pagina ci possono essere più UpdateProgress. Non solo, si possono anche creare UpdateProgress collegati con uno specifico UpdatePanel. Un caso in cui questa feature torna utile è quando si ha una pagina con diverse aree che si aggiornano indipendentemente e bisogna mostrare l'UpdateProgress solo per le sezioni che si stanno aggiornando. Questa associazione si definisce attraverso la proprietà AssociatedPanelId nella quale si inserisce l'Id del pannello collegato.

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdateProgress ID="prg1" runat="server" DisplayAfter="0" AssociatedUpdatePanelID="upd1">
  <ProgressTemplate>
    <div>Aggiornamento in corso panel 1</div>
  </ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdateProgress ID="prg2" runat="server" DisplayAfter="0" AssociatedUpdatePanelID="upd2">
  <ProgressTemplate>
    <div>Aggiornamento in corso panel 2</div>
  </ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="upd1" runat="server" >
  <ContentTemplate>
    <asp:button ID="btn1" runat="server" />
  </ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="upd2" runat="server" >
  <ContentTemplate>
    <asp:button ID="btn2" runat="server" />
  </ContentTemplate>
</asp:UpdatePanel>

Mantenersi aggiornati: Timer

Una delle basi del protocollo HTTP è che il server non mantiene nessun riferimento del client una volta che ha evaso la richiesta. Questo comporta che sia sempre il client a invocare il server per ottenere risposte (mai viceversa).

Molto spesso si devono realizzare pagine che devono aggiornare l'utente quando un determinato evento si verifica (l'arrivo di una mail, la risposta ad un messaggio, ecc.). Il controllo Timer è quello che serve per risolvere casistiche come queste. Questo controllo infatti scatena un postback sul server ad intervalli di tempo, specificati dalla proprietà Interval, e gestiti dall'evento Tick. Di per sè un Timer è completamente inutile se non sfruttato da un UpdatePanel. Infatti un UpdatePanel può essere aggiornato a intervalli regolari sfruttando o un oggetto Timer al proprio interno o collegando un trigger all'evento Tick.

<script runat="server">
  void Tick(object sender, EventArgs e)
  {
    lit.Text = DateTime.Now.ToString();
  }
</script>

...

<asp:Timer ID="timer" runat="server" Interval="2000" OnTick="Tick"></asp:Timer>
  <asp:UpdatePanel ID="upd2" runat="server" >
    <Triggers>
      <asp:AsyncPostBackTrigger ControlID="timer" EventName="Tick" />
    </Triggers>
    <ContentTemplate>
      <asp:literal ID="lit" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

In questo esempio il controllo Literal viene aggiornato con la data corrente calcolata sul server ogni due secondi.

Conclusioni

AJAX è ormai una realtà del mondo web e non si può più ignorarlo quando si pensa di creare una nuova applicazione. ASP.NET AJAX porta questo paradigma di sviluppo in ASP.NET con una semplicità estrema e con una fortissima integrazione con l'engine.

Con la RTM rilasciata a gennaio si può finalmente cominciare ad usare questo framework con la sicurezza di avere un supporto alle spalle. Inoltre questa release non presenta un punto di arrivo, in quanto con la prossima versione di ASP.NET il framework verrà integrato completamente.

3 pagine in totale: <<Indietro 1 2 [3]

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC