Am o problemă cu menținerea stării într-o pagină ASP.NET AJAX. Versiune scurtă: Am nevoie de un mod de a actualiza pagina ViewState după ce a fost efectuat un apel de asincronizare, pentru a reflecta modificările de stare pe care le-a făcut serverul în timpul apelului asincron.
Aceasta pare a fi o problemă obișnuită, dar îmi voi descrie scenariul pentru a explica:
Am un control asemănător grilei, care are unele îmbunătățiri JavaScript - și anume, capacitatea de a glisa și picătură coloane și rânduri. Atunci când o coloană sau un rând este scos într-o nouă poziție, se invocă o metodă AJAX pentru a notifica serverul de control și a declanșa un eveniment corespunzător de pe server ("OnColumnMoved" sau "OnRowMoved").
ASP.NET AJAX solicită, în mod implicit, să trimită întreaga pagină ca cerere. În acest fel, pagina trece printr-un ciclu complet de viață, vizualizarea este persistată și starea controlului este restabilită înainte ca metoda RaiseCallbackEvent să fie invocată.
However, since the AJAX call does not update the page, the ViewState reflects the original state of the control, even after the column or row has been moved. So the second time a client-side action occurs, the AJAX request goes to the server and the page & control are built back up again to reflect the first state of the control, not the state after the first column or row was moved.
Această problemă se extinde la numeroase implicații. De exemplu, dacă avem o acțiune client-side / AJAX pentru a adăuga un element nou în grila și apoi un rând este tras, grila este construită pe partea de server cu un element mai puțin decât pe partea clientului.
And finally & most seriously for my specific example, the actual data source object we are acting upon is stored in the page ViewState. That was a design decision to allow keeping a stateful copy of the manipulated data which can either be committed to DB after many manipulations or discarded if the user backs out. That is very difficult to change.
Deci, din nou, am nevoie de o modalitate prin care pagina ViewState să fie actualizată la apelul de apel după ce metoda AJAX este declanșată.