2009-07-27 15 views
15

Hay algunas preguntas similares publicadas aquí, pero ninguna que realmente responda a mis necesidades.Botón de retroceso página de actualización

Tengo una lista de elementos en una página, vamos a llamarlo masterlist.aspx. Si hago clic en uno de estos elementos de la lista, aparece otra página, es decir, details.aspx? Id = something.

La página que aparece tiene un control de vista de formulario en el modo de edición. Si el usuario desea editar los datos, pulsa un botón de edición de enlaces y, el formulario se envía al modo de edición, luego edita los datos y hace clic en el botón Guardar, guarda los datos y vuelve a colocar la vista de formulario en el modo de visualización.

El problema es si el usuario usa el botón Atrás del navegador para volver a la página masterlist.aspx la página no se actualiza, sino que se saca de la memoria caché del navegador.

He jugado con la configuración de caché de encabezados HTTP, pero no puedo obtener nada que funcione en todos los principales navegadores. En algunos navegadores, recibo advertencias expiradas en la página web. Otra opción es activar de alguna manera una actualización de página (o una actualización parcial de la página) cuando la página se carga utilizando el código del lado del cliente, pero no he podido averiguar cómo hacerlo.

¿Hay algún otro enfoque o alguien ha tenido éxito con los dos enfoques anteriores, o hay alguna forma de evitar el problema por completo.

+0

Esto es porque ASP.net utiliza un POST-formulario que contiene toda la página. No sé cómo solucionar esto, pero podría ayudarte. –

Respuesta

31

Tengo que hacer algo como esto en un catálogo donde la página de exploración debe cargarse desde el DB en cada carga porque cuando accedes a una página de producto llama a un tercero para obtener información actualizada y luego guarda si debería ser actualizado. Esto es así cuando presionas el botón Atrás como si dijeras que los datos se vuelven a cargar. Lo que hice fue agregado a la página y parece funcionar bien en todos los navegadores.

public class ProductBrowser : Page 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.Cache.SetNoStore(); 
     Response.Cache.SetExpires(DateTime.MinValue); 

     base.OnInit(e); 
    } 
} 
+0

funcionó para mi compañero de trabajo en Chrome y es decir, 6. – Merritt

+0

Gracias por eso, hemos intentado esto varias veces. Funciona en Firefox y IE9 también. – penderi

0

¿Qué hay de la captura del evento de pulsación del botón Atrás, luego, en lugar de permitirlo hacer un navegador.history.back(), puede hacer una llamada a document.location (...).

De forma alternativa, podría capturar el evento posterior y desencadenar una devolución posterior, lo que podría hacer un Response.Redirect ("yourpage"). Esto obligaría al navegador a emitir una instrucción GET para la página designada, y la haría actualizar

0

Con Javascript, una solución completa puede no ser posible, pero hay una solución alternativa.

http://www.boutell.com/newfaq/creating/backbutton.html

Se utiliza una función de tiempo de espera que fuerza repetidamente el navegador para realizar una acción 'Hacia adelante'. Incluso si alguien hace clic en el botón Atrás, regresará a la página real, lo que anulará la operación Atrás. Sin embargo, puede causar un parpadeo.

+0

Tenga cuidado con este método si tiene elementos de formulario en la página (como un formulario de inicio de sesión). Tiene el potencial de actualizar la página mientras el usuario escribe en los campos. –

0

He jugado un poco con la configuración de cabeceras de caché HTTP, pero no puede conseguir cualquier cosa que funciona en todos los navegadores. En algunos navegadores, recibo advertencias expiradas en la página web.

¿Cómo se llega a esa página de la lista maestra? Si emite un HTTP GET y para evitar que los clientes y los proxies lo guarden en caché, no tendrá problemas para volver a él (y aún así obtener una versión actualizada).

Eso lo deja con el almacenamiento en memoria caché del lado del servidor (con la invalidación adecuada cuando cualquiera de esos elementos cambia) o sin almacenamiento en caché en absoluto.

Cuestiones relacionadas