Domanda

Ho un problema con il mantenimento di un ASP.NET pagina AJAX.Versione breve:Ho bisogno di qualche modo per aggiornare la pagina ViewState dopo un async richiamata è stato fatto, in modo da riflettere i cambiamenti di stato del server durante la chiamata asincrona.

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

Ho una griglia di controllo che ha un po ' di JavaScript miglioramenti - vale a dire, la capacità di trascinare le colonne e le righe.Quando una colonna o una riga è caduta in una nuova posizione, AJAX, viene richiamato il metodo di notificare il controllo lato server e il fuoco di un corrispondente server-side event ("OnColumnMoved" o "OnRowMoved").

ASP.NET le chiamate AJAX, per impostazione predefinita, inviate l'intera pagina della richiesta.Che modo la pagina passa attraverso un ciclo di vita completo, viewstate è persistente e lo stato del controllo viene ripristinata prima che l'RaiseCallbackEvent, viene richiamato il metodo.

Tuttavia, dal momento che la chiamata AJAX non aggiorna la pagina, il ViewState riflette il originale stato del controllo, anche dopo la colonna o la riga è stata spostata.Così la seconda volta che un client-side azione si verifica, la richiesta AJAX va al server e la pagina & controllo sono costruite di nuovo per riflettere il prima stato del controllo, non dello stato, dopo la prima riga o colonna è stata spostata.

Questo problema si estende a molte implicazioni.Per esempio, se si dispone di un client-side/azione AJAX per aggiungere un nuovo elemento alla griglia, e poi una riga viene trascinato, la griglia è costruita sul lato server con un elemento che sul lato client.

E, infine, e più seriamente per il mio esempio specifico, l'effettiva origine dei dati oggetto stiamo agendo su è memorizzato nella pagina ViewState.Che è stata una decisione di progettazione per consentire di mantenere un stateful copia dei dati manipolati, che può essere commesso da DB dopo molte manipolazioni o annullata se l'utente effettua out.Che è molto difficile cambiare.

Quindi, di nuovo, ho bisogno di un modo per la pagina di ViewState per essere aggiornato su richiamata dopo l'AJAX metodo viene licenziato.

È stato utile?

Soluzione

Se sei già mischiare il ViewState intorno a ogni modo, si potrebbe anche utilizzare un UpdatePanel.La sua parziale postback sarà aggiornare la pagina di ViewState automaticamente.

Altri suggerimenti

Check out questo post del blog: Per modificare il ICallbackEventHandler e Viewstate.L'autore sembra affrontare la situazione che si sta verificando:

Così, quando si utilizza ICallbackEventHandler vi sono due ostacoli da superare per avere aggiornato la gestione dello stato per funzioni di callback.Il primo è il problema di sola lettura viewstate.L'altro è in realtà la registrazione delle modifiche che l'utente ha effettuato la pagina prima di attivare la funzione di callback.

Vedi il post del blog per i suoi suggerimenti su come risolvere questo problema.Controllare anche questo forum post cui viene descritto lo stesso problema.

In realtà l'ho trovato entrambi i link che hai fornito, ma, come già osservato, sono semplicemente descrivendo il problema, non risolverlo.L'autore del post sul blog suggerisce una soluzione utilizzando un diverso ViewState provider, ma purtroppo non è una possibilità in questo caso...ho davvero bisogno di lasciare le generalità del ViewState da solo e solo il gancio a ciò che viene fatto out-of-the-box.

Ho trovato un modo abbastanza elegante soluzione con Telerik del RadAjaxManager.Funziona abbastanza bene, essenzialmente si registra ogni controllo che potrebbe richiamare un postback, e quindi registrare ogni controllo che dovrebbe essere ri-disegnata dopo che postback viene eseguita in modo asincrono.Il RadAjaxManager aggiornare il DOM dopo il postback asincrono e riscrivere il ViewState e tutti i controlli interessati.Dopo di prendere un peek a il Riflettore, che sembra un po ' difettose sotto il cofano, ma si adatta al mio scopo.

Non capisco perché si dovrebbe utilizzare un controllo personalizzato per che, quando il builtin ASP.NET AJAX UpdatePanel fa la stessa cosa.

Si aggiunge solo più complessità, dà meno supporto, e rende più difficile per gli altri a lavorare sul vostro app.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top