2008-10-03 6 views
3

J'ai créé un contrôle utilisateur pour gérer l'ajout de commentaires à certaines entités commerciales, telles que les contacts et les clients. Fonctionne bien ... sauf pour un problème.AJAX, publications et actualisations du navigateur

J'utilise un contrôle ListView pour modifier et supprimer des commentaires, et une zone distincte, sur le même contrôle utilisateur pour ajouter un nouveau commentaire. Tout cela est enveloppé dans un UpdatePanel.

Screenshot

Voici mon scénario ... l'utilisateur ajoute un nouveau commentaire ... la page fait un postback, les données sont sauvegardées avec succès, et le contrôle ListView est mis à jour pour montrer le nouveau commentaire. Maintenant, si l'utilisateur actualise le navigateur, il sera naturellement postback à nouveau et ajoutera un autre enregistrement en double.

Des idées sur la meilleure façon d'éviter cela?

+0

Comment ajoutez-vous le nouveau commentaire? Cela fait partie du gestionnaire d'événements "Ajouter un commentaire"? – EndangeredMassa

+0

Oui ... tout cela fonctionne ... mais si l'utilisateur appuie sur leur bouton de rafraîchissement sur leur navigateur, il va ajouter un autre enregistrement. – mattruma

+0

Il y a un bon article sur le sujet [ici] (http://aspalliance.com/687_Preventing_Duplicate_Record_Insertion_on_Page_Refresh.all). – ballpointpeon

Répondre

4

Vous pouvez essayer d'utiliser la Post/Redirect/Get modèle. Fondamentalement, au lieu de laisser la publication envoyer les données, rediriger vers la page. Ainsi, si un utilisateur actualise, il actualise la commande GET plutôt que le POST.


Désolé .. manqué la pièce UpdatePanel. Assurez-vous que votre bouton de soumission est également dans ce UpdatePanel. Une actualisation de page n'affecte pas votre appel AJAX, mais lorsque le bouton est en dehors du panneau, il effectue une publication régulière, ce qui vous oblige à envoyer de nouveau la demande d'ajout.

+0

@Wayne Ne serait-ce pas vaincre tout le but de l'AJAX? La page entière ne serait-elle pas actualisée si je redirigeais? – mattruma

+0

Ce serait vaincre l'utilisation de AJAX –

+0

Je vais donner un tourbillon! – mattruma

0

Je ne l'ai pas utilisé ASP.NET dans quelques années, mais vous devez envelopper votre "faire postback sur" code Page.IsPostBack:

if(IsPostBack) { 
    //do your data-saving code... 
} 

MSDN link

+0

Cela ne fonctionnera pas car ils postposent un post-retour. –

Questions connexes