Problema con Ajax

mercoledì 19 novembre 2008 - 11.48

Gemini Profilo | Expert

Ciao a tutti,
sto utilizzando l'updatePanel e ho un bel problema.
Creo dinamicamente una tabella e quando clicco su un tasto, nell'updatePanel, questo mi esegue il Page_Load e perdo la tabella creata.
Come posso evitare di eseguire il Page_Load e non perdere la tabella?
Se mi esegue il Page_Load, non vedo il vantaggio nell'utilizzare Ajax visto che perdo la tabella.

Ricordo che l'Ajax nel asp.net 1.1 non eseguiva il Page_load e non avevo nessun problema.

Grazie mille

rossimarko Profilo | Guru

Ciao,

non ho ben capito il problema, però se vuoi capire se è stata fatta una richiesta ajax puoi sfruttare la proprietà IsInAsyncPostBack (http://msdn.microsoft.com/it-it/library/system.web.ui.scriptmanager.isinasyncpostback.aspx)

Esempio:
ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Gemini Profilo | Expert

Ciao,
mi spiego: mi creo dinamicamente una tabella. Questa tabella si trova all'interno di un UpdatePanel.
Quando clicco su un tasto, anche questo nel updatePanel, voglio caricare delle inforamazioni aggiuntive.
Il problema è che quando clicco sul tasto viene eseguito anche il Page_Load e perdo la tabella che ho creato.

Ricordo che nel Ajax di asp.net 1.1 quando richiamavo una funzione Ajax, non veniva eseguito il Page_Load

rossimarko Profilo | Guru

Prova a guardare se riesci a risolvere con la proprietà che ti ho segnalato..
Bisogna però vedere se la tabella viene ricreata e come, perchè se aggiungi un controllo dinamicamente alla pagina non è detto che dopo un postback lo ritrovi nuovamente..

PS: che ajax usavi con asp.net 1.1? La libreria di microsoft era compatibile solo framework 2 se non sbaglio
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Gemini Profilo | Expert

era una ddl ajaxpro

Wamba Profilo | Expert

Ciao,
1) Secondo me il problema non è nel page_load, ma nel controllo dinamico: Se lo crei in modo dinamico lo devi ricreare ad ogni postback. Fai una prova con un controllo statico.
2) Il postback asincrono è identico ad un qualunque altro postback salvo nella fase di rendering che è gestita in modo diverso, ma il ciclo di vita della pagina non cambia di una virgola.
3) La tua affermazione non è sbagliata: L'update panel non è "ajax" in senso proprio, ma qui la faccenda si fa più complicata. Dipende molto da che cosa devi ottenere.


-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

Gemini Profilo | Expert

Ma ricreare il controllo al page_load, vuol dire che devo richiamare la procedura che me la creatao precedentemente?
Ma così non perdo tempo?

rossimarko Profilo | Guru

Sarebbe una perdita di tempo se si potesse farne a meno.. Il problema è che se tu non ricrei i controlli asp.net non sa che esistevano.
Vale la stessa cosa per i controlli definiti nel file aspx. Ad ogni post il "motore" di asp.net li legge e li ricrea. Il discorso poi è un po' più complesso perchè entrano in gioco il viewstate, i controlli databound ecc però sappi che se il controllo è stato creato dinamicamente dovrai ricrearlo ad ogni postback.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Wamba Profilo | Expert

Giustissimo quello che dice Marco, la domanda che ti devi porre è: che cosa devo fare lato server? L'Update panel è la forma di ajax più corretta?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

Gemini Profilo | Expert

Se non utilizzo UpdatePanel, come posso utilizzare Ajax?

Wamba Profilo | Expert

con AjaxMethod o WebMethod.
Dipende molto in cosa consiste l'operazione da eseguire. Se devi ricreare mezza pagina è una questione se devi notificare qualcosa al server per eseguire un salvataggio nel DB un'altra.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

Gemini Profilo | Expert

Grazie per l'aiuto,
ma se uso AjaxMethod, se non ricordo male, non è possibile lato server accedere ai controlli presenti nella pagina o mi sbaglio?
Quando ho utilizzato AjaxMethod ho avuto i seguenti problemi:
-come dicevo, non riuscivo ad accedere ai controlli lato server ed ero constretto a recuperare i dati con javascript, inserirli in un vettore e passare il vettore alla funzione lato server.
-quando volevo creare una tabella per esempio, dovevo recuperare lato server i dati da inserire nella tabella, inserire i dati in un vettore, far restituire alla funzione chiamata con AjaxMethod il vettore, recuperare da javascript il vettore e creare la tabella. Ma questo non va bene se devo creare una tabella un pò complicata.

Ora è possibile superare questi problemi?
Grazie

Wamba Profilo | Expert

No, è sempre così.
Per semplificare potresti spiegarci cosa deve fare questa parte della tua pagina?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

Gemini Profilo | Expert

Ok, ti spiego cosa deve fare la pagina.
Ho un form di ricerca nel quale un utente sceglie il numero di camere che vuole, il periodo, il numero di adulti, bambini e neonati.
Il sistema cerca le possibili soluzioni e le visualizza.
Se l'utente clicca su un tasto, il sistema deve visualizzare i dettagli dell'offerta(questo voglio caricare con Ajax).

Ma questa è la parte più semplice. Il difficile viene ora.
Se l'utente va avanti nella prenotazione si va in una pagina dove può aggiungere servizi alla prenotazione, scegliere il tipo di trattamento per ogni persona, scegliere la tipologia della camere ecc.
Voglio fare in modo che ogni volta che viene aggiunto qualcosa non venga caricata l'intera pagina, ma modificata solo la parte di pagina che vado a modificare. Esempio se aggiungo un servizio, voglio solo aggiungere il servizio e calcolare il totale da pagare per i servizi senza ricaricare tutta la pagina e rifare tutti i calcoli.
Spero di essere stato chiaro

Wamba Profilo | Expert

dunque se Attivare il serivizio si traduce con un mostrare un'immagine o una scritta io rimarrei sui webmethod e lavorerei di javascript per creare le modifiche grafiche. Per Il ricalcolo del totale non ti basta costruire una struttura dati e poi fare la somma di tutti i servizi lato js? Ovviamente poi la controlli lato server prima di eseguire le operazioni di salvataggio. Deve servire solo da mostrare all'utente.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

Gemini Profilo | Expert

non posso lavorare con javascript perchè questo vorrebbe dire non utilizzare molti webcontroll che potrebbero facilitare il lavoro

Wamba Profilo | Expert

cosa vuoi dire?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

Gemini Profilo | Expert

Se utilizzo un gridviee e voglio aggiungere una nuova riga, come faccio da javascript?
O se voglio modificare una riga di un gridview in modalità edit, come faccio?

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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5