Aquí podría ser tu PUBLICIDAD


Estado de seguimiento utilizando ASP.NET AJAX / ICallbackEventHandler

votos
9

Tengo un problema con el mantenimiento del estado en una página ASP.NET AJAX. Versión corta: necesito alguna forma de actualizar la página ViewState después de que se haya realizado una devolución de llamada asíncrona, para reflejar cualquier cambio de estado que haya realizado el servidor durante la llamada asincrónica.

Este parece ser un problema común, pero describiré mi escenario para ayudar a explicar:

Tengo un control tipo cuadrícula que tiene algunas mejoras 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, se invoca un método AJAX para notificar al lado del servidor de control y desencadenar un evento del lado del servidor correspondiente (OnColumnMoved o OnRowMoved).

Las llamadas ASP.NET AJAX, por defecto, envían toda la página como solicitud. De esta forma, la página pasa por un ciclo de vida completo, viewstate se conserva y el estado del control se restablece antes de que se invoque el método RaiseCallbackEvent.

Sin embargo, dado que la llamada AJAX no actualiza la página, ViewState refleja el estado original del control, incluso después de mover la columna o fila. Por lo tanto, la segunda vez que ocurre una acción del lado del cliente, la solicitud AJAX va al servidor y la página y el control vuelven a crearse para reflejar el primer estado del control, no el estado después de mover la primera columna o fila.

Este problema se extiende a muchas implicaciones. Por ejemplo, si tenemos una acción AJAX / del lado del cliente para agregar un nuevo elemento a la grilla, y luego se arrastra una fila, la grilla se construye en el lado del servidor con un elemento menos que en el lado del cliente.

Y, por último y más en serio para mi ejemplo específico, el objeto de fuente de datos real sobre el que estamos actuando está almacenado en la página ViewState. Esa fue una decisión de diseño para permitir mantener una copia con estado de los datos manipulados que pueden ser comprometidos con DB después de muchas manipulaciones o descartados si el usuario se retracta. Eso es muy difícil de cambiar.

Así que, de nuevo, necesito una forma de que la página ViewState se actualice en la devolución de llamada después de que se active el método AJAX.

Publicado el 05/08/2008 a las 14:52
fuente por usuario Rex M
En otros idiomas...        العربية       

5 respuestas

votos
1

Si ya está barajando el ViewState de todos modos, también podría usar un UpdatePanel. Sus devoluciones de datos parciales serán actualizar la página de ViewState automáticamente.

Respondida el 07/08/2008 a las 05:19
fuente por usuario Dave Ward


Aquí podría ser tu PUBLICIDAD


votos
1

Echa un vistazo a esta publicación en el blog: retocando el ICallbackEventHandler y Viewstate . El autor parece estar abordando la situación que estás experimentando:

Por lo tanto, al usar ICallbackEventHandler tiene dos obstáculos que superar para tener una administración de estado actualizada para las devoluciones de llamadas. Primero está el problema del viewstate de solo lectura. El otro es en realidad registrar los cambios que el usuario ha realizado en la página antes de activar la devolución de llamada.

Consulte la publicación del blog para conocer sus sugerencias sobre cómo solucionar esto. También echa un vistazo a esta publicación en el foro que también analiza el mismo problema.

Respondida el 05/08/2008 a las 03:25
fuente por usuario Yaakov Ellis

votos
0

No entiendo por qué usaría un control personalizado para eso, cuando el UpdatePanel ASP.NET AJAX incorporado hace lo mismo.

Simplemente agrega más complejidad, le da menos soporte y hace que sea más difícil para otros trabajar en su aplicación.

Respondida el 08/08/2008 a las 05:56
fuente por usuario Dave Ward

votos
0

Encontré una solución bastante elegante con RadAjaxManager de Telerik . Funciona bastante bien, esencialmente registras cada control que podría invocar una devolución de datos, y luego registras cada control que se debe volver a dibujar después de que la devolución de datos se realiza de forma asincrónica. 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 echar un vistazo en Reflector, parece un poco kludgy debajo del capó, pero se adapta a mis propósitos.

Respondida el 08/08/2008 a las 05:18
fuente por usuario Rex M

votos
0

De hecho, encontré ambos enlaces que me brindó, pero como se señaló, simplemente están describiendo el problema, no resolviéndolo. El autor de la publicación del blog sugiere una solución mediante el uso de un proveedor de ViewState diferente, pero desafortunadamente esa no es una posibilidad en este caso ... Realmente necesito dejar los detalles del ViewState solo y simplemente aferrarme a lo que se está haciendo fuera de la caja.

Respondida el 05/08/2008 a las 03:54
fuente por usuario Rex M