Belius' Blog

Il blog di Simone Belia
posts - 16, comments - 54, trackbacks - 53

Tutto dinamico.....ma ora c'è AJAX

Chi è che non si è mai trovato difronte alla problematica di Web User Control caricati dinamicamente? (la risposta dovrebbe essere "chi non lavora con ASP.NET"....ma fate finta che non ho detto nulla) :)

In ogni caso, la problematica è sempre la stessa:

dobbiamo stare attenti a quando questi vengono creati in quanto se aggiungo uno o più eventi ai controlli caricati a runtime questi non vengono catturati se non ho lo WUC presente entro il Page_Load.

Poco male....visto la  miriade di post che ci sono al riguardo e che per un verso e per un altro fanno tutti lo stesso giro.

La cosa però si complica se oltre ad utilizzare questa metodologia si vuole anche utilizzare AJAX ed un controllo File Upload aggiunto a runtime.

La tecnologia AJAX infatti non riesce a fare upload di file in modo asincontrono e proprio per questo è buona norma mettere il controllo FileUpload all'esterno di un UpdatePanel, così da avere un postback completo.
Se però il controllo deve essere per forza dentro un UpdatePanel si può traquillamente inserire un Trigger nel pannello al fine di permettere il Postback completo quando si usa il FileUpload.

Nel mio caso avevo dei pulsanti che inserivano dei WUC a runtime richiamando un metodo ed impostando il ViewState con le informazioni essenziali per ricreare i controlli al successivo postback. Nel Page_Load controllavo il ViewState e se questo non era vuoto ricreavo i WUC (così da permettere agli stessi di intercettare l'evento) e tutto andava che era una meraviglia.

Aggiungendo AJAX però tutto ciò non funzionava come volevo, in quanto ogni volta che richiamavo un evento asincrono dei controlli creati a runtime, il trigger che diceva di fare un Postback completo al controllo FileUpload andava a farsi friggere.
Dopo una mezza giornata di testate contro il muro o provato a fare una cosa.....ho creato l'override del metodo CreateChildControls ed ho inserito qua dentro la "ricreazione" dei controlli così da anticipare il Page_Load.

Ora tutto funziona......ma quanto ci sarebbe da dire rispetto all'ordine di richiamo dei metodi e degli eventi del Framework.

Print | posted on lunedì 1 ottobre 2007 14.01 | Filed Under [ ASP.NET AJAX ]

Feedback

Gravatar

# re: Tutto dinamico.....ma ora c'è AJAX

1- tanto se dai le testate al muro non ti fai male perché becchi il cappello
2- esasperato, io avevo stampato l'ordine degli eventi del caricamento della pagina e ne avevo affisso una copia sul muro. L'altra copia, stampata, era il foglio più usato dell'ufficio...
01/10/2007 15.03 | marco
Gravatar

# re: Tutto dinamico.....ma ora c'è AJAX

hehheeh....è vero!!!

Dovresti stampare allora 2 copie in quanto il metodo CreateChildControls viene richiamato:

1. la prima volta che accedi ad una pagina dopo il Page_Load
2. quando effettui i postback viene richiamato prima del Page_Load

.....meglio che non iniziamo il dibattito su cosa succede dietro le quinte secondo me ho provato a leggere in maniera incrociata la documentazione ed le classi esplose tramite reflector e stavo diventando matto!!!! :-)
01/10/2007 18.35 | Belius
Gravatar

# re: Tutto dinamico.....ma ora c'è AJAX

mmm... ma perché non torniamo a CGI? :))
p.s.: ma fatte un gravatar, che quell'affare marrone nun se po' vede'...
02/10/2007 15.48 | marco
Gravatar

# Ajax dynamic user control

Ajax dynamic user control
12/10/2007 12.36 | Pingback/TrackBack
Gravatar

# re: Tutto dinamico.....ma ora c'è AJAX

come si ripristinano i controlli aggiunti dinamicamente alla pagina , dopo un postback, mediante il viewstate?
mi interessa saperlo sia in caso di postback sincrono che asincrono , grazie :D
19/11/2008 11.55 | trooper
Gravatar

# re: Tutto dinamico.....ma ora c'è AJAX

Ciao trooper,

puoi gestire la logica di ripristino dentro al CreateChildControl.
Logicamente il panel dove sono i controlli deve stare dentro ad un UpdatePanel se utilizzi metodi asincroni.

ciao
Simone
19/11/2008 11.58 | Belius
Gravatar

# re: Tutto dinamico.....ma ora c'è AJAX

potresti postare quanche spezzone di codice come esempio?
ho iniziato da poco ad usare .net per cuinonsono molto pratico.
se hai qualche link che mi spieghi un po' la questione ti sarei grato :)

grazie
19/11/2008 12.06 | trooper
Gravatar

# re: Tutto dinamico.....ma ora c'è AJAX

ti spiego meglio la questione per farti capire qual'è il mio problema :
dopo un primo postback aggiungo dinamicamente alla mia pagina una tabella contenente dei dati ricavati mediante una computazione dei dati trasmessi al primo postback.

questa tabella contiene al suo interno altri controlli dropdownlist , imagebutton ... per ogni riga.
quando viene premuto uno dei tasti su una delle righe io vorrei aggiungere ulteriori informazioni in quella stessa riga, solo che al pageload successivo , la tabella che contiene i controlli inquestione non esiste più perche era stata creata dinamicamente dopo il primo postback.

dunque io vorrei ricreare questa tabella per poterla elaborare, senza ovviamente chiamare la funzione che me l'ha creata la prima volta , per no neffettuare nuovamente la computazione.
19/11/2008 12.57 | trooper

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 8 and 5 and type the answer here:

Powered by: