UpdatePanel e trigger su evento JavaScript - JSAsyncPostBackTrigger

by Andrea 3/26/2007 10:03:00 PM

Come accennavo nel post precedente, a volte capita di voler aggiornare il contenuto di un UpdatePanel tramite un evento JavaScript. Il non poter fare questa cosa un pò mi rodeva, e allora ho cercato una soluzione e, applicando alcuni workaround, sono riuscito a creare un tipo di trigger per l'UpdatePanel che fa scatenare l'update agganciandosi ad un preciso evento JavaScript.

Come usarlo:
Questo trigger va aggiunto alla collezione dei trigger come lo si fa per i due tipi di trigger esistenti (AsyncPostBackTrigger, PostBackTrigger ):

[...]
    </ContentTemplate>
     <Triggers>
         <asp:JSAsyncPostBackTrigger
                 ControlID="txtText"
                 EventName="keyup"
                 ClientFunction="validation" />
         <asp:JSAsyncPostBackTrigger
                 ControlID="txtText"
                 EventName="change" />
     </Triggers>
 </asp:UpdatePanel>
Nel trigger vanno specificati, l'ID del controllo (ControlID) che scatena l'evento, il nome dell'evento JavaScript (EventName) che farà scatenare l'Update, e facoltativamente, il nome di una funzione JavaScript per la validazione (ClientFunction) che ho visto che spesso può tornare utile. Quest'ultima può valutare se far scatenare o no il trigger, e per fare ciò è sufficiente impostare un flag (args.IsValid) a true per fare scatenare l'update, o a false per annullare il trigger. Questa funzione può essere usata anche per eseguire del codice JavaScript prima dell'update del UpdatePanel. 
Eccone un esempio:
function validation(args) {
    if (($get('txtText').value.length % 3) == 0)
    {
        args.IsValid = true;
    }
    else
     {
        args.IsValid = false;
    }
}

Per poter usare il tutto, si deve referenziare la dll ed il trigger va registrato nella pagina nel seguente modo:
<%@ Register Assembly="XeDotNet.Dottor.Web.UI" Namespace="XeDotNet.Dottor.Web.UI" TagPrefix="asp" %>
oppure nel Web.Cofig all'interno del blocco pages:
<add Register Assembly="XeDotNet.Dottor.Web.UI" Namespace="XeDotNet.Dottor.Web.UI" TagPrefix="asp" />

Problemi conosciuti:
Questo tipo di trigger è ancora allo stato embrionale, infatti al momento ha il difetto di non poter venire aggiunto dinamicamente durante un PostBack, ma conto di risolvere questo punto al più presto. (UPDATE del 27.03.2007 - problema risolto) Attenzione a quali eventi agganciate al trigger per evitare un numero tropppo elevato di PostBack.

Compatibilità:
Il trigger dovrebbe essere cross-browser in quanto fa uso della ASP .NET AJAX library (che è cross-browser).

Download:
(ultimo aggiornamento dei file in download: 30.03.2007) Ecco il link per il download della dll ed ecco il link con il download del codice sorgente ed un esempio d'uso.

Feedback:
Vi chiedo solamente di lasciare un vostro commento/impressione per avere alcuni feedback e sapere se approfondire il trigger in questione (e se può servire realmente a qualcuno all'infuori di me).

Thanks smile_wink

Technorati tags: , , ,

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Ajax ASP.NET

Related posts

Comments

3/29/2007 3:03:05 PM

ASP.NET AJAX: Un tipo con i triggers

di .NET e di altre Amenità

3/29/2007 11:03:53 PM

Questo script funziona correttamente sia con Ie che con FF. Testato! Mi ha risolto un bel problema: l'aggiornamento di un UpdatePanel all'evento click di un checkbox su un TreeView.
Grazie mille.

Massimo

3/31/2007 6:03:11 AM

Ho scoperto che se uso una masterpage ed ho del codice tipo il trigger va in errore:

HttpException was unhandled user code

The Controls collection cannot be modified because the control contains code blocks (i.e. ).

Maurizio

3/31/2007 9:03:26 PM

Ciao, ho aggiornato il codice del trigger, ma per alcune sviste che mi sono accorto.

Il tuo problema è dovuto alla presenza dei codeblocks nella pagina, e questo non è un problema da poco. Dovresti provare a toglierli...

Ti giro alcuni link che presentano alcuni workaround per il problema in questione:
www.aspnetresources.com/.../..._cause_trouble.aspx
http://west-wind.com/weblog/posts/5758.aspx
http://west-wind.com/WebLog/posts/6148.aspx

Andrea Dottor

1/10/2008 3:01:05 PM

ottimo esempio, molto utile, grazie

davide

Add comment


 

  Country flag

biuquote
  • Comment
  • Preview
Loading