J'ai page .aspx cette page insère les données à la base de données sur un clic de bouton. Mais quand j'appuie sur le bouton ça va bien. Je reçois le message Successfully comme "données insérées avec succès". Dans cette situation, si j'appuie sur "F5" ou Actualise la page, il déclenche l'événement de clic sur le bouton. Pourquoi ça devrait être? Comment éviter cette condition?Comment éviter les événements bouton sur Actualiser de la page
Répondre
Lorsque l'utilisateur clique F5 (ou utilise un bouton de la barre d'outils pour actualiser la page), il va faire une nouvelle demande, identique au précédent, à envoyer au serveur. Le Button.Click
événement sera être relancé, mais vous avez quelques moyens de vous protéger contre l'insertion des données deux fois.
La meilleure façon, à mon humble avis, est d'utiliser le Post/Redirect/Get pattern. Dans votre code, juste après le point où les données sont enregistrées, faites une redirection 302 vers une page de confirmation:
protected void btnSaveStuff_Click(object sender, EventArgs e)
{
SaveStuffToDatabase();
Response.Redirect("confirmation.aspx");
}
Lorsque vous utilisez le motif, la POST
à la page originale ne se terminera pas dans l'historique du navigateur, et l'actualisation de la page de résultats entraînera la répétition du GET
final, ce qui devrait être sûr.
J'ai lu l'article. mais Comment utiliser GET/POST dans le scénario de détail principal alors? –
Je ne suis pas sûr de ce que vous entendez par "scénario de détail principal". Comme indiqué dans mon exemple de code, vous devez simplement faire un "Response.Redirect", qui "annulera" puis "POST" et rendra le navigateur à un nouveau "GET". –
ok je vais essayer, merci pour la réponse –
L'actualisation soumettra de nouveau le formulaire que vous avez publié la dernière fois lorsque vous avez cliqué sur le bouton. Habituellement, lorsque vous actualisez une page, vous pensez à OBTENIR la page à nouveau ou à faire un HTTP GET, mais puisque la dernière chose que vous avez faite était un POST (lorsque vous avez cliqué sur le bouton "submit") tenter d'invoquer la même réponse.
Je suggère d'utiliser le modèle Post/Redirect/Get comme suggéré par Jorn Schou-Rode.
Cet article semble également pertinent. http://aspalliance.com/687_Preventing_Duplicate_Record_Insertion_on_Page_Refresh
Je ne pense pas que TJB le deuxième lien que vous avez fourni est l'utilisation complète. J'ai besoin de trop d'exécution, n'est-ce pas? vraiment le code est bon mais pas correct. Voir Si j'ai 100 pages donc selon cet article, je dois coder sur chaque page avec les champs respectifs. Ce qui est faux. Est-ce un autre moyen? –
Ajouter dans votre classe:
#region Browser Refresh
private bool refreshState;
private bool isRefresh;
protected override void LoadViewState(object savedState)
{
object[] AllStates = (object[])savedState;
base.LoadViewState(AllStates[0]);
refreshState = bool.Parse(AllStates[1].ToString());
if (Session["ISREFRESH"] != null && Session["ISREFRESH"] != "")
isRefresh = (refreshState == (bool)Session["ISREFRESH"]);
}
protected override object SaveViewState()
{
Session["ISREFRESH"] = refreshState;
object[] AllStates = new object[3];
AllStates[0] = base.SaveViewState();
AllStates[1] = !(refreshState);
return AllStates;
}
#endregion
Et dans votre cliquage faire ceci:
protected void Button1_Click(object sender, EventArgs e)
{
if (isRefresh == false)
{
Insert Code here
bonne réponse. cela vous dérangerait-il si vous expliquiez votre code ici? Merci – fc123
Je suppose que 'LoadViewState' et' SaveViewState' doivent être câblés à certains événements?Lesquels et/ou comment faites-vous cela? – RBarryYoung
sympa! J'ai mis le code dans ma page de base et utilisé la condition if dans la page où l'événement de clic de bouton est présent. ça a bien marché! bon travail +1 pour vous – Vijayaraghavan
Ajouter un panneau de mise à jour et définir le mode de mise à jour du panneau de mise à jour en tant que condition. Cela a fonctionné pour moi !!
- 1. Comment éviter les doublons lorsqu'un utilisateur clique sur le bouton "Actualiser" de son navigateur?
- 2. Actualiser la page du bouton Chrome - ASP.net
- 3. Menu popup jQuery Sur la page Actualiser
- 4. ASP.NET répéteur - comment actualiser les données sur le bouton soumettre
- 5. Actualiser la page Dans wpf
- 6. Actualiser l'iframe sans actualiser la page parente
- 7. Actualiser jsp la page
- 8. Comment actualiser la page lors du redimensionnement?
- 9. Actualiser la page Auto
- 10. Actualiser le bouton sur une vue Rails
- 11. Gestion de l'historique (bouton Actualiser)
- 12. Quels sont les en-têtes HTTP nécessaires pour actualiser une page sur le bouton de retour
- 13. div actualiser sans clic sur le bouton
- 14. Actualiser le contrôle utilisateur sans actualiser la page
- 15. Les données actuelles proviennent de tcp sur la page Web sans actualiser la page entière?
- 16. Actualiser la page après avoir appuyé sur le bouton Précédent du téléphone widonws 7
- 17. Asp.Net SQL Actualiser les insertions de la page en double?
- 18. Éviter les événements mouseover pour iOS
- 19. Actualiser la page à l'aide de jQuery
- 20. pour éviter l'actualisation de la page lors d'un événement de clic sur un bouton dans asp.net
- 21. Bouton "Fermer" sur la page
- 22. Comment puis-je éviter de cliquer sur le bouton OK
- 23. php Actualiser la page actuelle?
- 24. Fil de bouton cliquez sur les événements après AJAX post
- 25. ASP.NET: éviter RequiredFieldValidator sur le bouton de navigation de publication
- 26. éviter chargement de la page sur le bouton HTML image cliquez
- 27. Page Actualiser dans ASP.NET
- 28. Actualiser asp.net mvc page
- 29. Actualiser ListBox Après avoir cliqué sur le bouton
- 30. ASP.NET [Actualiser ma page :)]
pouvez-vous ajouter un code de votre? – bala3569