Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
[JAX] Aggiornare progresso elaborazione con contatore
lunedì 24 agosto 2009 - 11.04
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
gigi90
Profilo
| Senior Member
285
messaggi | Data Invio:
lun 24 ago 2009 - 11:04
Salve a tutti, vi pongo il problema in maniera molto semplice: ho un pulsante che lancia un ciclo For fino ad N, io vorrei che ad ogni iterazione del ciclo For si aggiornasse una label che visualizza il contenuto della mia variabile del ciclo.
Come posso realizzare un qualcosa del genere con AJAX di ASP.NET.
roma.salvatore
Profilo
| Newbie
3
messaggi | Data Invio:
lun 24 ago 2009 - 12:48
Label lbl = new Label();
lbl.ID = "lblMsg";
lbl.Text = "Premi il bottone..";
Button btn = new Button();
btn.ID = "btnTest";
btn.CommandArgument = "Ciao, sono dinamico";
btn.Text = "Premi qui";
// Lego all'evento click del bottone il metodo di gestione in modo dinamico
btn.Command += new CommandEventHandler(btn_Command);
// Inserisco i controlli dinamicamente nel placeholder contenuto nell’update panel
PlaceHolder1.Controls.Add(btn);
PlaceHolder1.Controls.Add(lbl);
A questo punto non resta che aggiungere il codice per il gestore d'evento che verrà chiamato al click del bottone, il quale essendo all'interno di un Update Panel non provocherà il postback della pagina ma l'aggiornamento del solo contenuto dell'Update Panel..
void btn_Command(object sender, CommandEventArgs e)
{
// Recuper il riferimento alla Label caricata dinamicamente nel PlaceHolder
Label lbl = PlaceHolder1.FindControl("lblMsg") as Label;
if (lbl != null)
lbl.Text = e.CommandArgument.ToString();
}
Gluck74
Profilo
| Guru
1.359
messaggi | Data Invio:
lun 24 ago 2009 - 18:54
si.... questa è una soluzione.........
però in questo caso si utilizza il rendering parziale, e non Ajax puro.
A parete l'errore di concetto: con questo esempio per vedere avanzare il numero nella label bisogna ogni volta cliccare il pulsante.
Il ciclo for sarebbe comunque completo quando la pagina fa il renderig dell'UpdatePanel.
faccio una descrizione di concetto per ora. Se riesco a ricavare un po di tempo e fare un test, riporterò anche la soluzione.
Io userei ajax puro, quindi un webMethod o un PageMethod.
Ci vuole anche un meccanismo che rilasci un evento per la pagina.
Il bottone deve quindi richamare il web/page method, che all'interno avrà dunque il ciclo for.
Adesso ci vuole, per ogni iterazione, un evento che torna in dietro alla pagina e faccia dunque scattare il gestore (handler).
Nel gestore si legge dunque il valore della label e si incrementa di 1.
La parte che ora mi sfugge (ma spero di riuscire con un esempio) è proprio questa: creare una funzione di callBack per aggiornare la label che viene richamata dal ciclo for.
Spero di scrivere presto la soluzione
Gluck74
Profilo
| Guru
1.359
messaggi | Data Invio:
mar 25 ago 2009 - 14:16
Dunque, ho fatto un po di ricerca e.........
purtroppo non si può esporre degli eventi da un webService ad un client. (o perlomeno non ho trovato nulla)
L'unica soluzione sarebbe utilizzare WCF che permette di fare una comunicazione più complessa.
Però utilizzando un'escamotage si potrebbe simulare l'aggiornamento, ma rimane pur sempre un "pezza".
L'idea sarebbe di utilizzare lato javascript un timer che richiama periodicamente un secondo metodo che va a controllare lo stato del primo.
Naturalmente questo è inutile quando il primo metodo esegue una procedura veloce.
Tirando le somme:
La pagina richama il metodo (page o web) tramite javascript che esegue l'operazione principale e memorizza lo stato di avanzamento
la pagina aspx istanzia un timer javascript che richiama un secondo metodo che legge semplicemente lo stato di avanzamento
la funzione legata all'evento onsuccess del secondo metodo aggiorna la pagina HTML
la funzione legata all'evento onsuccess del primo metodo ferma il timer e conclude l'aggiornamento della pagina HTML
Questa la soluzione a grandi linee, sfruttando ajax pure e richieste asincrone "vere".
Ho trovato un esempio che utilizza questa stessa idea:
http://mattberseth.com/blog/2008/07/aspnet_file_upload_with_realti.html
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !