7
votes

Comment éviter les événements des boutons sur l'actualisation de la page

J'ai la page .ASPX Cette page insère les données dans la base de données sur un bouton Cliquez. Mais quand j'appuie sur le bouton, il va bien. J'obtiens le message avec succès sous forme de "données insérées avec succès". Dans cette situation si j'appuie sur "F5" ou rafraîchissez la page, il tire le bouton Cliquez sur l'événement. Pourquoi ça devrait être? Comment éviter cette condition?


1 commentaires

Pouvez-vous ajouter du code de votre ??


4 Réponses :


10
votes

Lorsque l'utilisateur clique sur F5 (ou utilise un bouton de la barre d'outils pour actualiser la page) Il sera provoquer une nouvelle demande, identique au précédent, à envoyer à le serveur. La touche .Cliquez sur Evénement sera levée à nouveau, mais vous avez quelques façons de vous protéger contre l'insertion des données deux fois.

Le meilleur moyen, IMHO, est de Utilisez le Post / Redirection / Obtenir le modèle . Dans votre code, juste après le point où les données sont enregistrées, effectuez une redirection 302 à une page de confirmation: xxx

Lorsque vous utilisez le motif, le post à la page d'origine ne se retrouvera pas dans l'historique du navigateur, et rafraîchir la page de résultat provoquera la répétition de la finale à être répétée, ce qui doit être sûr.


4 commentaires

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 échantillon de code, vous devez simplement faire un réponse.redirect.ReRirect , qui "annuler" puis POST et faire le navigateur à un nouveau obtenir < / code>.


Et si à la fin des données d'enregistrement, un message d'affichage doit être affiché dans ce cas, la réponse de @ Love-40 est la bonne


@XYZ, je préférerais toujours "casser" le post en effectuant une redirection. Si vous souhaitez afficher un écran de confirmation, créez-le sur une URL séparée et une redirection de l'article.



0
votes

L'actualisation soumettra le formulaire que vous avez posté la dernière fois lorsque vous avez cliqué sur le bouton.

Habituellement, lorsque vous rafraîchissez une page, vous pensez à la recherche de la page ou à faire un get HTTP, mais depuis la dernière chose que vous avez fait était un message (lorsque vous avez cliqué sur le bouton Soumettre), le navigateur effectuera à nouveau le poste. tenter d'invoquer la même réponse.

Je suggère d'utiliser le modèle post / redirection / Obtenir comme suggéré par Jorn Schou-Rode .

Cet article semble également pertinent. http://aspalliance.com/687_prevent_duplate_record_insertion_on_page_refresh


1 commentaires

Je ne pense pas tjb le deuxième lien que vous avez fourni est à l'usage complet. J'ai besoin de trop d'exécution juste? Vraiment le code est bon mais pas correctement. Voyez si j'ai 100 pages, donc selon cet article, je dois coder sur chaque page avec des champs respectifs. Ce qui est faux. Est une autre façon ?? s'il vous plaît



4
votes

Ajoutez ceci dans votre classe: xxx pré>

et dans votre bouton, cliquez sur Ceci: P>

protected void Button1_Click(object sender, EventArgs e)
{
    if (isRefresh == false)
    {
        Insert Code here


4 commentaires

bonne réponse. Voulez-vous vous déranger si vous expliquez votre code ici? Merci


Je suppose que lockviewstate et sauvegarde de l'État doit être câblé jusqu'à certains événements? Lesquels et / ou comment faites-vous cela?


agréable! Je mets le code dans ma page de base et j'ai utilisé la condition IF dans la page où le bouton Cliquez sur l'événement est présent. ça a fonctionné bien! bon travail +1 pour vous


J'ai utilisé votre code, je suis confronté à un problème, si mon bouton clic événement n'est pas Ajax, alors Isrefresh est true sur le premier bouton Cliquez, donc si je clique sur le bouton pour la deuxième fois, Isrefresh est fausse et que les données sont soumises à DB.



3
votes

Ajoutez un panneau de mise à jour et définissez le mode de mise à jour du panneau de mise à jour sous forme de conditionnel. Cela a fonctionné pour moi !!


0 commentaires