2009-02-12 2 views
3

double:How can I prevent database being written to again when the browser does a reload/back?Prévention formulaire en ligne resoumission lors de l'actualisation du navigateur sans perdre viewstate


est-il un bon moyen élégant pour arrêter une page .aspx de resoumettre données de formulaire si l'utilisateur demande une actualisation de leur navigateur?

Idéalement sans perdre le viewstate.

EDIT: La solution la plus élégante pour moi s'est avérée être l'emballage des contrôles pertinents dans un asp.net UpdatePanel asp.net. Ta tout le monde.

Répondre

1

Il n'y a pas de manière élégante, mais il y a des options. Comme indiqué dans l'une des autres réponses, vous pouvez effectuer une réponse de redirection HTTP. Une autre solution consiste à soumettre via des moyens tels que Ajax, ou via un iframe.

1
+0

Je cherchais quelque chose qui ne me perdrait pas mon viewstate. Un moyen de le garder? –

+0

Si la redirection est interrompue en raison d'un délai d'attente, etc., l'utilisateur risque toujours d'actualiser l'URL initiale, ce qui entraînera un double POST. –

+0

Ceci n'est applicable que dans certaines circonstances. –

4

Générez et insérer un identifiant unique dans la page qui est également stockée sur le serveur. Stockez-le lorsque le formulaire est soumis et ne laissez pas cette valeur se transmettre à plusieurs reprises.

MISE À JOUR: Ceci est la seule façon "appropriée" de le faire. Quand je dis cela, je veux dire stocker quelque chose du côté serveur. Tout ce qui est basé sur le comportement du client est potentiellement bogué. Ces implémentations ne concernent pas les éventuels bugs de navigateur, incompatibilités, javascript désactivé, délais de connexion, etc.

Quelque chose du côté serveur doit savoir que cette action particulière a déjà été effectuée et l'arrêter du côté serveur. J'insiste là-dessus, car souvent cela doit être fait pour empêcher un client de rafraîchir et de faire plusieurs commandes (et potentiellement plusieurs factures). Ceci permet également au client de se rafraîchir gracieusement si l'action n'a pas réellement été reçue et traitée par le serveur (par exemple dans le cas d'un dépassement de temps).

+1

Ne serait-ce pas cool si ASP.NET avait une option pour activer ce jeton unique automatiquement? –

+0

N'est-ce pas aussi difficile si l'utilisateur a plusieurs fenêtres de navigateur ouvertes à la fois? Vous avez potentiellement besoin de garder la trace de plusieurs jetons uniques pour chaque fenêtre, sinon l'utilisateur ne peut pas soumettre sur AUTRES fenêtres une fois qu'il soumet sur un. Y a-t-il une solution de contournement élégante? –

+0

@jm: Vous générez cet identifiant unique par page, et non par utilisateur (je pense?). – Svish

Questions connexes