IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Disable bouton sur click avec validation


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 77
    Points : 56
    Points
    56
    Par défaut Disable bouton sur click avec validation
    Bonjour

    j'ai un soucis en asp.net.

    J'aimerais qu'un bouton ait le comportement suivant :

    Lorsque l'utilisateur clique dessus, le curseur passe en sablier et le bouton est disabled (le bouton lance un traitement de quelques secondes et évidemment les utilisateurs pressés aiment appuyer sur le bouton plein de fois pour que ça aille plus vite )

    En fouinant sur le net, je suis arrivé à la solution suivante :

    J'ai sous-classé Button et surchargé la méthode Render de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
        public class MyBtCreate : System.Web.UI.WebControls.Button
        {
            private ClientScriptManager csm;
            public ClientScriptManager ClientScript
            {
                set { csm = value; }
                get { return csm; }
            }
            protected override void Render(HtmlTextWriter writer)
            {
                this.Attributes["onclick"] = "document.body.style.cursor = 'wait'; this.disabled = true; " + csm.GetPostBackEventReference(this, "", true) + ";";
                base.Render(writer);
            }
        }
    et je set la propriété ClientScriptManager dans le PageLoad.

    Ca fonctionne bien, à un bémol prêt, la validation causé normalement par le bouton ne fonctionne plus.
    J'ai 4 champs obligatoires et 4 contrôles RequiredFieldValidator qui vont avec, le clic sur le bouton les ignore depuis cette modification.

    Je pensais qu'en mettant "true" en 3ème argument à mon GetPostBackEventReference() ça enclencherait la validation mais je ne suis pas sur d'avoir compris de quelle validation on parle ici.

    Quelqu'un peut-il éclairer ma lanterne ?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    La validation est liée à l'événement onclick. Donc je pense que la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Attributes["onclick"] = "document.body.style.cursor = 'wait';
    "supprime" l'appel aux validateurs.

  3. #3
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,

    comme tu utilises un bouton, tu devrais plutot utiliser OnclientClick
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.OnclientClick = "document.body.style.cursor = 'wait'; this.disabled = true; "

  4. #4
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 77
    Points : 56
    Points
    56
    Par défaut
    Salut

    merci pour vos réponses, j'ai trouvé une solution sur le net, je n'avais pas bien cherché il faut croire en tout cas ça marche super bien.

    On fait ce qu'on veut avec le bouton et ça passe bien par la validation de la page au préalable donc c'est exactement ce que je cherchais.

    Il suffit de rajouter le code suivant dans le Page_Load (par exemple):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                System.Text.StringBuilder sbValid = new System.Text.StringBuilder();
                sbValid.Append("if (typeof(Page_ClientValidate) == 'function') { ");
                sbValid.Append("if (Page_ClientValidate() == false) { return false; }} ");
                sbValid.Append("this.value = '...';");
                sbValid.Append("this.disabled = true;");
                sbValid.Append("document.all.BtCreateWorkspace.disabled = true;");
                //GetPostBackEventReference obtains a reference to a client-side script function that causes the server to post back to the page.
                PostBackOptions opt = new PostBackOptions(this.BtCreateWorkspace);            
                sbValid.Append(this.Page.ClientScript.GetPostBackEventReference(opt));
                sbValid.Append(";");
                this.BtCreateWorkspace.Attributes.Add("onclick", sbValid.ToString());

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Activer désactiver bouton sur feuille avec condition
    Par cathodique dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/09/2013, 07h22
  2. Gestion du bouton "cancel" sur action avec validator
    Par pcouas dans le forum Struts 2
    Réponses: 3
    Dernier message: 11/11/2011, 12h29
  3. [Cocoa] Lier un bouton sur IB avec une methode
    Par ToxiK dans le forum Apple
    Réponses: 2
    Dernier message: 06/10/2010, 15h52
  4. Bloquer un bouton sur click
    Par doudou_rennes dans le forum ASP.NET
    Réponses: 5
    Dernier message: 20/01/2010, 12h31
  5. Réponses: 4
    Dernier message: 08/05/2007, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo