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.