Stato di monitoraggio utilizzando ASP.NET AJAX / ICallbackEventHandler

voti
9

Ho un problema con il mantenimento dello stato in una pagina ASP.NET AJAX. Versione corta: ho bisogno di un modo per aggiornare la pagina ViewState dopo un callback asincrona è stato fatto, per riflettere eventuali modifiche allo stato del server fatta durante la chiamata asincrona.

Questo sembra essere un problema comune, ma io descrivere la mia situazione per aiutare a spiegare:

Ho un controllo a griglia che ha alcuni miglioramenti JavaScript - cioè la capacità di trascinare le colonne e righe. Quando una colonna o riga è sceso in una nuova posizione, un metodo AJAX viene richiamato per notificare al server-side controllo e sparate un evento corrispondente lato server ( OnColumnMoved o OnRowMoved).

ASP.NET AJAX chiamate, per impostazione predefinita, inviare l'intera pagina come la richiesta. In questo modo la pagina passa attraverso un ciclo di vita completo, ViewState viene mantenuto e lo stato del controllo viene ripristinata prima che il metodo RaiseCallbackEvent viene richiamato.

Tuttavia, poiché la chiamata AJAX non aggiorna la pagina, il ViewState riflette l' originale stato del controllo, anche dopo la colonna o riga sono stati spostati. Così la seconda volta che si verifica un'azione sul lato client, la richiesta AJAX va al server e la pagina di controllo e sono costruiti su nuovamente per riflettere la prima stato del controllo, non lo stato dopo la prima colonna o riga è stata spostata.

Questo problema si estende a molte implicazioni. Per esempio se abbiamo un'azione lato client / AJAX per aggiungere una nuova voce alla griglia, e poi una riga viene trascinato, la griglia è costruito sul lato server con un elemento inferiore sul lato client.

E, infine, e più seriamente per il mio esempio specifico, l'oggetto reale origine dei dati stiamo agendo su è archiviato nella pagina di ViewState. E 'stata una decisione di progettazione per consentire mantenere una copia stateful dei dati manipolati, che può essere impegnata per DB dopo molte manipolazioni o scartato se l'utente si ritira. Questo è molto difficile da cambiare.

Così, ancora una volta, ho bisogno di un modo per la pagina ViewState per essere aggiornato sulla richiamata dopo il metodo AJAX è sparato.

È pubblicato 05/08/2008 alle 14:52
fonte dall'utente
In altre lingue...                            


5 risposte

voti
1

Se sei già mischiare il ViewState intorno comunque, si potrebbe anche utilizzare un UpdatePanel. Le sue postback parziali si aggiorna automaticamente ViewState della pagina.

Risposto il 07/08/2008 a 17:19
fonte dall'utente

voti
1

Dai un'occhiata a questo post sul blog: Ottimizzare l'ICallbackEventHandler e Viewstate . L'autore sembra essere affrontare la stessa situazione che si sta vivendo:

Così, quando si utilizza ICallbackEventHandler si hanno due ostacoli da superare per avere la gestione dello stato aggiornato per le richiamate. In primo luogo è il problema del ViewState di sola lettura. L'altro è in realtà la registrazione dei cambiamenti che l'utente ha fatto alla pagina prima di attivare la richiamata.

Vedere il post sul blog per i suoi suggerimenti su come risolvere questo problema. Verificate anche questo post sul forum che discute lo stesso problema pure.

Risposto il 05/08/2008 a 15:25
fonte dall'utente

voti
0

Non capisco il motivo per cui si usa un controllo personalizzato per questo, quando il incorporato ASP.NET AJAX UpdatePanel fa la stessa cosa.

Si aggiunge solo una maggiore complessità, si dà meno sostegno, e rende più difficile per gli altri a lavorare sulla vostra app.

Risposto il 08/08/2008 a 05:56
fonte dall'utente

voti
0

Ho trovato una soluzione piuttosto elegante, con RadAjaxManager di Telerik . Funziona abbastanza bene, in sostanza, si registrare ogni controllo che potrebbero invocare un postback, e quindi registrare ogni controllo, che dovrebbe essere nuovamente utilizzata dopo che postback viene eseguita in modo asincrono. Il RadAjaxManager aggiornerà DOM dopo il postback asincrono e riscrivere il ViewState e tutti i controlli interessati. Dopo aver preso una sbirciatina in Reflector, sembra un po 'kludgy sotto il cofano, ma si adatta i miei scopi.

Risposto il 08/08/2008 a 05:18
fonte dall'utente

voti
0

In realtà ho trovato entrambi questi link che hai fornito, ma come notato essi sono semplicemente descrivendo il problema, non risolverlo. L'autore del post sul blog suggerisce una soluzione utilizzando un provider ViewState diversa, ma purtroppo non è una possibilità in questo caso ... ho davvero bisogno di lasciare i particolari della ViewState da solo e semplicemente agganciare a ciò che si sta facendo fuori dalla scatola.

Risposto il 05/08/2008 a 15:54
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more