Stasera ho provato a smontare l'updatepanel per cercare di capirne il funzionamento. Dopo un po' che mettevo il naso qui e li nel codice con FireBug, sono arrivato al cuore ovvero dove vengono effettuate le chiamate. Ne è uscito questo pezzettino di codice, tratto adattando gli internals che utilizza Sys.Net.WebClient per effettuare una chiamata in POST sul server di provenienza della pagina. In realtà il codice è volutamente semplificato per renderlo maggiormente comprensibile a chiunque:

   1: Downloader = function Elite$Downloader()
   2: { }
   3:  
   4: Downloader.prototype =
   5: {
   6:     _asyncPostBackCompleted:function(sender, eventArgs)
   7:     {
   8:         var tm = $get("time");
   9:         tm.innerHTML = sender.get_responseData();
  10:     },
  11:     download:function()
  12:     {
  13:         var request = new Sys.Net.WebRequest();
  14:         request.set_url("time.axd");
  15:         request.get_headers()['X-AndreaBoschinAjax'] = 'Delta=true';
  16:         request.get_headers()['Cache-Control'] = 'no-cache';
  17:         request.set_timeout(10000);
  18:         request.set_httpVerb("GET");
  19:         request.add_completed(Function.createDelegate(this, this._asyncPostBackCompleted));
  20:         request.set_body("");
  21:         request.invoke();
  22:     }      
  23: }

Nel codice che ho scritto dichiaro una classe "Downloader" creata semplicemente per pura utilità nell'assegnare i delegate. Al click di un pulsante (non incluso nel riquadro) viene invocato il metodo download() che effettua la chiamata al server e restituisce la risposta in modo asincrono.

Non so dirvi l'utilità pratica di questo codice, ma dicerto ha una sua utilità "accedemica". Chissà poi che qualcuno non trovi un caso reale in cui applicarlo.


Aggiungi Commento