Pregunta

Tengo un problema con el mantenimiento del estado en un ASP.NET página de AJAX.Versión corta:Necesito alguna manera de actualizar la página ViewState después de un async devolución de llamada se ha hecho, para reflejar los cambios de estado del servidor durante la llamada asincrónica.

Esto parece ser un problema común, pero voy a describir mi situación para ayudar a explicar:

Tengo una red-como el control que tiene algo de JavaScript - es decir, la capacidad de arrastrar y soltar columnas y filas.Cuando una columna o fila se coloca en una nueva posición, AJAX método se invoca para notificar el control del lado del servidor y del fuego correspondiente de eventos del servidor ("OnColumnMoved" o "OnRowMoved").

ASP.NET las llamadas AJAX, por defecto, enviar toda la página como la solicitud.De esa manera la página pasa a través de un ciclo de vida completo, viewstate se conserva y el estado del control es restaurado antes de la RaiseCallbackEvent método es invocado.

Sin embargo, desde la llamada de AJAX no actualización de la página, el ViewState refleja la original estado del control, incluso después de la columna o de la fila se ha movido.Así que la segunda vez que un cliente que ocurre la acción, la petición AJAX va al servidor y la página de control y se construyen de nuevo para reflejar la primero estado del control, no el estado después de la primera columna o fila se movió.

Este problema se extiende a muchas implicaciones.Por ejemplo, si tenemos un cliente/AJAX de acción para agregar un nuevo elemento a la red y, a continuación, una fila se arrastra, la cuadrícula es construido en el lado del servidor con un elemento menos que en el lado del cliente.

Y por último y lo más serio para mi ejemplo específico, el objeto de origen de datos que estamos actuando sobre se almacena en la página de ViewState.Esa fue una decisión de diseño para permitir el mantenimiento de un estado de la copia de la manipulado los datos que pueden ser cometidos a DB después de muchas manipulaciones o se descarta si el usuario realiza una copia de seguridad.Que es muy difícil de cambiar.

Así que, de nuevo, necesito una forma para que la página ViewState para estar actualizado sobre de devolución de llamada después de que el AJAX método es despedido.

¿Fue útil?

Solución

Si ya estás barajando el ViewState alrededor todos modos, se podría utilizar un UpdatePanel.Su devoluciones parciales se actualización el ViewState de la página automáticamente.

Otros consejos

Echa un vistazo a este blog: El ajuste de la ICallbackEventHandler y Viewstate.El autor parece estar dirigiéndose a la misma situación que usted está experimentando:

Así que cuando se utiliza ICallbackEventHandler tiene dos obstáculos a superar para tener actualizado el estado de la gestión de las devoluciones de llamada.La primera es el problema de la lectura-sólo el viewstate.La otra realidad es el registro de los cambios que el usuario ha hecho a la página antes de activar la devolución de llamada.

Ver la entrada de blog por sus sugerencias sobre cómo solucionar esto.También echa un vistazo a este post del foro que trata el mismo problema así.

De hecho, encontré tanto de los enlaces que proporcionan, pero como se ha señalado que son simplemente describiendo el problema, no resolverlo.El autor de el blog sugiere una solución mediante el uso de un ViewState proveedor, pero desafortunadamente eso no es una posibilidad en este caso...de verdad tengo que dejar los detalles de la ViewState solo gancho en lo que se está haciendo fuera de la caja.

He encontrado una bastante elegante solución con Telerik del RadAjaxManager.Funciona bastante bien, esencialmente, usted se registre cada control que podría invocar una devolución de datos y, a continuación, registrar cada control que deben re-dibujado después de que la devolución se realiza de forma asíncrona.El RadAjaxManager actualizará el DOM después de la devolución de datos asincrónica y reescribir el ViewState y todos los controles afectados.Después de tomar un vistazo en el Reflector, se ve un poco desacoplados bajo el capó, pero que se adapte a mis propósitos.

No entiendo por qué debería utilizar un control personalizado para que, cuando el grupo builtin ASP.NET AJAX UpdatePanel hace lo mismo.

Sólo añade más complejidad, le da menos apoyo, y hace que sea más difícil para los demás a trabajar en su aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top