2010-04-29 8 views
9

J'ai une application ASP.net (C#). Lorsqu'un utilisateur se trouve sur une page spécifique, il clique sur un lien de cette page pour accéder à une page enfant et afficher les détails du produit.Actualiser la page du bouton Chrome - ASP.net

Si l'utilisateur clique sur le bouton de retour du navigateur, j'ai besoin que la page parente soit rafraîchie à son état initial. c'est-à-dire que toutes les zones de texte dont les données ont été saisies doivent être vides, les champs masqués doivent être réinitialisés, etc. En fait, j'ai besoin d'un CTRL-F5 lorsqu'un utilisateur clique en arrière.

La désactivation du bouton de retour n'est pas une option.

Je n'ai besoin de cela que sur certaines pages.

Dans IE et Firefox, je peux obtenir ce travail sans problème. Mais avec chrome, les zones de texte contiennent toujours leurs valeurs, tout comme les champs cachés. Si je clique sur CTRL-F5 dans Chrome, la page est correctement réinitialisée à son état initial.

C'est le code que j'ai essayé.

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

et ceci:

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

et ceci:

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

J'ai aussi essayé une variété de ceux-ci dans différentes combinaisons, mais sans succès.

grâce

+0

Avec quel (s) Chrome (s) as-tu essayé? Dev? Bêta? Stable? Les fenêtres? – bzlm

Répondre

0

La solution « force brute » serait de mettre un peu de javascript sur la page que la page charge définit les données à un état connu. Il trouve donc tous les éléments et définit les données en fonction d'un tableau de données ou d'un objet json. Sur la demande initiale, puisque tout est par défaut de toute façon, le réglage ne fait pas de différence. Sur une demande de bouton de retour, puisque le javascript doit encore être exécuté, il réinitialise toutes les valeurs, quel que soit le navigateur. Je ne crois pas que vous puissiez forcer un navigateur à fonctionner de la façon dont vous le décrivez, car c'est à chaque navigateur de décider comment il veut implémenter un bouton de retour - chrome le fait différemment.

6

Lorsque vous appuyez sur le bouton Précédent du navigateur, les champs INPUT ne sont pas automatiquement réinitialisés par le navigateur. Au lieu de cela, le navigateur conserve l'entrée de l'utilisateur, ce qui permet aux utilisateurs de revenir plus facilement et de modifier l'entrée.

Vous ne pouvez pas résoudre ce côté serveur, car le navigateur contourne le cache pour cela. Au lieu de cela, vous pouvez utiliser l'attribut HTML autocomplete="off" dans les champs de saisie pour empêcher qu'ils soient conservés par le navigateur.

Vous pouvez également réinitialiser manuellement le formulaire en utilisant JavaScript:

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

merci. Cela n'explique pas pourquoi Ie & Firefox semble être rafraîchissant mais pas Chrome. – SetiSeeker

+0

C'est un choix de conception par les gens de Google, je suppose. Je suis toujours heureux qu'ils supportent l'attribut 'autocomplete' comme une solution de contournement. – Prutswonder

+0

Ceci est une méchante "fonctionnalité" de Chrome pour les développeurs. Il m'a fallu du temps pour comprendre ce qui arrivait à ma forme dynamique (les utilisateurs peuvent ajouter de nouvelles lignes qui sont enregistrées dans un db sur submit). En "retour", Chrome ne remplirait pas les identifiants de base de données des lignes précédemment ajoutées (même si mon application l'affichait en HTML), donc mon application pensait qu'elles étaient toutes nouvelles et les dupliquait sur un autre envoi. 'autocomplete =" off "' fait l'affaire, cependant. – theyetiman

2

Ces deux lignes ont résolu le problème Chrome pour moi:

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

Et j'utiliser cette ligne en option pour indiquer au navigateur de ne pas créer une entrée historique pour chaque demande de la même page:

Response.Cache.SetAllowResponseInBrowserHistory(true); 

Sources:

Most popular answer in this post

Optional line

0

Vous pouvez aussi mettre le autocomplete = "off" sur l'étiquette de forme au lieu de tous les champs d'entrée.

Questions connexes