2010-04-29 30 views
9

Tengo una aplicación ASP.net (C#).actualización de la página del botón Volver atrás Chrome: ASP.net

Cuando un usuario se encuentra en una página específica, hace clic en un enlace en esta página que lo lleva a una página secundaria, que muestra los detalles del producto.

Si el usuario hace clic en el botón Atrás del navegador, necesito que la página principal se actualice a su estado inicial. es decir, todos los cuadros de texto que tenían datos escritos deben estar en blanco, los campos ocultos deben reiniciarse, etc. Básicamente, necesito un CTRL-F5 cuando un usuario hace clic atrás.

Desactivar el botón Atrás no es una opción.

Necesito esto solo en ciertas páginas.

En IE y Firefox puedo hacerlo funcionar sin problemas. Pero con Chrome, los cuadros de texto aún contienen sus valores, al igual que los campos ocultos. Si presiono CTRL-F5 en Chrome, la página se restablece correctamente a su estado inicial.

Este es el código que he intentado.

<%@ OutputCache Location="None" VaryByParam="None" %> 

y esto:

Response.Buffer = true; 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetAllowResponseInBrowserHistory(false); 
    Response.Cache.SetNoStore(); 

y esto:

Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
    Response.Cache.SetValidUntilExpires(false); 
    Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetNoStore(); 

También he probado una gran variedad de estos en diferentes combinaciones, pero sin éxito.

gracias

+0

¿Con qué Chrome (s) probaste esto? Dev? ¿Beta? ¿Estable? Windows? – bzlm

Respuesta

0

La solución de 'fuerza bruta' sería poner algo de JavaScript en la página que establece en la página de carga de los datos a un estado conocido. Por lo tanto, encuentra todos los elementos y establece los datos en función de una matriz de datos o un objeto json. En la solicitud inicial, dado que todo está predeterminado de todos modos, la configuración no hace la diferencia. En una solicitud de botón de retroceso, dado que el JavaScript aún debe ejecutarse, restablece todos los valores, independientemente del navegador.

No creo que pueda obligar a un navegador a funcionar de la manera que describe, ya que depende de cada navegador cómo quieren implementar un botón Atrás - Chrome lo hace de manera diferente.

6

Cuando se presiona el botón Atrás del navegador, el navegador no restaura automáticamente los campos de ENTRADA. En cambio, el navegador retiene la entrada del usuario, lo que facilita a los usuarios regresar y realizar un cambio en la entrada.

No puede resolver este lado del servidor, porque el navegador omite el caché para esto. En su lugar, puede usar el atributo HTML autocomplete="off" en los campos de entrada para evitar que el navegador los retenga.

También puede restablecer manualmente el formulario utilizando JavaScript:

document.getElementById("form1").reset(); 
+1

gracias. Esto no explica por qué Ie y Firefox parecen ser refrescantes, pero no Chrome. – SetiSeeker

+0

Supongo que es una elección de diseño de la gente de Google. Todavía estoy contento de que admitan el atributo 'autocompletar' como una solución alternativa. – Prutswonder

+0

Esta es una desagradable "característica" de Chrome para desarrolladores. Me llevó años descubrir qué le estaba pasando a mi formulario dinámico (los usuarios pueden agregar nuevas filas que se guardan en un archivo db en el envío). En "atrás", Chrome no completaba los id de db de las filas agregadas anteriormente (aunque mi aplicación lo estaba sacando en el HTML), por lo que mi aplicación pensó que todos eran nuevos y los duplicó en un nuevo envío. 'autocomplete =" off "' hace el truco, sin embargo. – theyetiman

2

Estas dos líneas resolvieron el problema de Chrome para mí:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 

Y utilizar esta línea opcional para decirle al navegador que no crear una entrada de historial para cada solicitud de la misma página:

Response.Cache.SetAllowResponseInBrowserHistory(true); 

Fuentes:

Most popular answer in this post

Optional line

0

También se puede poner el autocomplete = "off" en la etiqueta de formulario en lugar de cada campo de entrada.

Cuestiones relacionadas