Question

J'ai quelques contrôles qui héritent des boutons ASP.NET et utilisent « onserverclick ».

Si l'utilisateur clique deux fois, le bouton déclenche deux événements côté serveur.Comment puis-je empêcher cela ?

J'ai essayé de définir "this.disabled='true'" après le clic (dans l'attribut 'onclick') via javascript, mais cela bloque également la première publication.

Était-ce utile?

La solution

Voir cet exemple pour désactiver le contrôle lors de la publication.Cela devrait vous aider à faire ce que vous essayez d’accomplir.

http://encosia.com/2007/04/17/disable-a-button-control-during-postback/

Autres conseils

Vous ne souhaitez pas nécessairement afficher le bouton désactivé lors de la publication.Vous voulez vous assurer qu’ils ne soumettent pas accidentellement deux fois.Donc désactiver ou masquer le bouton à la suite d'un du côté serveur l'action est déjà trop tard dans le jeu.À ce stade, la deuxième demande est déjà en cours.Vous devez soit le faire avec javascript, soit vous assurer que votre code côté serveur ne s'exécutera pas deux fois.

Dans le cas d'un panneau de mise à jour et d'un bouton à l'intérieur d'un modèle FormView, j'utilise l'approche suivante :

<script type="text/javascript">
    // Using that prm reference, hook _initializeRequest
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequestBuchung);

    // Abfangen von Mehrfachklicks auf Buttons für asynchrone Postbacks im Updatepanel
    function InitializeRequestBuchung(sender, args) {
        var arrButtonIds = ["ButtonInsert", "ButtonUpdate"];

        // Get a reference to the PageRequestManager.
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        if (prm.get_isInAsyncPostBack() & jQuery.inArray(args.get_postBackElement().id, arrButtonIds) > -1) {
            args.set_cancel(true);
        }
    }
</script>

Cela annule une publication suivante si une publication asynchrone est actuellement toujours active.Fonctionne parfaitement.

Quelqu'un d'autre a dit cela quelque part ici il y a quelques jours, et je suis d'accord - utilisez javascript pour simplement cacher le bouton au lieu de le désactiver ;vous pouvez afficher une image "spinner" à sa place, ce qui permet à l'utilisateur de savoir ce qui se passe.

Au lieu de me cacher, j'ai échangé des boutons à l'aide de javascript.Afficher une autre image grisée en cliquant sur le premier bouton.

Définissez la propriété Button UseSubmitBehavior sur false.Créez ensuite une fonction OnClientClick qui désactive le bouton.Cela ressemblerait à ceci :

<script type="text/javascript">
   function disableFunctn(button){
       button.disabled = true;
   }
</script>
<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="disableFunctn(this);"/>

le moyen le plus rapide et le moins cher :

<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="this.disabled=true;"/>

Vous pouvez également essayer par exemple btnSave.Enable = false;lorsque le bouton est enfoncé et avant que le traitement du bouton ne soit effectué dans la routine Click Event.Si vous avez besoin de le réinitialiser pour pouvoir l'activer, disposez d'un bouton séparé qui réinitialise le bouton pour le réutiliser.

Une autre méthode consiste à définir le bouton avec vérification de sorte que l'on demande à l'utilisateur s'il souhaite enregistrer, il devrait apparaître les deux fois.

Une autre méthode consisterait à signaler la première occurrence, puis à définir une fenêtre contextuelle pour la seconde afin de vérifier une deuxième utilisation ou une utilisation ultérieure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top