2010-05-25 7 views
5

Estoy tratando de evitar un efecto de "parpadeo" que está ocurriendo en mi página ASP.NET que ocurre cuando un usuario navega a la página a través del botón de retroceso del navegador después de haber navegado fuera de ella. El motivo del parpadeo es que estoy usando un Panel de actualización que tiene contenido allí en la carga de página inicial. Como resultado, cuando la página se carga mediante un botón de retroceso, el contenido inicial se muestra muy brevemente antes de actualizarse con los datos correctos de Historial.¿Cómo puedo detectar el lado del cliente cuando una carga de página es el resultado de un punto de historial AJAX?

Para superar esto, tengo la intención de tener el panel de actualización oculto (mostrar: ninguno) en la carga de la página inicial y luego mostrarlo, siempre y cuando no tengamos ningún historial con el que lidiar. El problema es que no puedo averiguar qué verificar para determinar si hay algún historial. Puedo ver que la aplicación Sys.Application tiene un miembro _history pero cuando lo estoy revisando en la página init es nulo cada vez.

¿Alguien sabe lo que debería verificar para determinar si hay historial para una carga de página del lado del cliente? ¿Y en qué punto hacerlo?

Respuesta

1

El botón Atrás del navegador y la funcionalidad que proporciona son completamente independientes del contenido de su página web.

Una cosa que podría hacer es establecer su hash de ubicación cuando realiza una actualización de AJAX. Es posible que pueda detectar esto cuando carga una página. No lo he intentado. Debería poder analizar la parte # de la url en el lado del servidor y ver dónde se encuentra en el historial de AJAX.

location.hash = 'foo'; 
0

Gracias por su respuesta Daniel. Ahora tengo un div alrededor de mi panel de actualización que tiene su propiedad de visualización establecida en none. En el evento init de Sys.Application, estoy verificando el valor de window.location.hash para determinar si la carga de la página es el resultado de un clic en el botón de retroceder/avanzar del navegador. Si no es así, estoy configurando la propiedad de pantalla para bloquear, si no la dejo como 'display: none' por el momento.

En el lado del servidor en el controlador de eventos ScriptManager Navigate que se llama como resultado del clic en el botón Atrás estoy registrando un bloque de script de cliente que establece la propiedad de visualización para bloquear.

He hecho algunas pruebas y parece funcionar bien y ya no me da el parpadeo. Preferiría usar uno de los objetos del cliente MS AJAX para verificar el historial, pero ahí estamos.

+0

Esa es la mejor manera de hacerlo: configure la pantalla: ninguno en la carga de la página (onBody). Debería atenderlo. – waqasahmed

+3

debe usar los comentarios para responder a las personas que responden, o edite su pregunta original con más detalles basados ​​en las preguntas o comentarios de otras personas. No publique el debate como respuestas individuales, a menos que sea la respuesta real a su problema (usted mismo lo resolvió). –

0

Ponga una entrada oculta en la página con un valor en blanco, y luego en la carga de página establezca su valor. Descubrirá que al usar el botón Atrás, el script de carga de página encontrará que el valor aún está configurado y puede responder en consecuencia. Esto aprovecha la funcionalidad del navegador que conserva el contenido del formulario entre cargas de página.

Cuestiones relacionadas