Bouton qui empeche le multi clic avant la fin du traitement. disable double postback

Description

lorsqu'un utilisateur clique plusieurs fois sur un bouton, cela entraine plusieurs postback

si l'on fait un traitement long dans le post back puis un redirecte, il peut y avoir des problemes si l on onsere des donnees en base

grace a ce bouton, il est impossible de renvoye un postback tant que le premier n est pas finit

il y a la possibilite de definir s il y a une validation a attendre avec un validator

Source / Exemple :


namespace WebControlLibrary1
{
    using System;
    using System.ComponentModel;
    using System.Text;
    using System.Web.UI;
    using System.Web.UI.WebControls;

    /// <summary>
    /// Button who disable double post back
    /// </summary>
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:CustomButton runat=server></{0}:CustomButton>")]
    public class CustomButton : Button 
    {
        private bool _useValidation = false;
        private string _waitingText = "Patientez svp...";

        /// <summary>
        /// Gets or sets a value indicating whether [use validation].
        /// </summary>
        /// <value><c>true</c> if [use validation]; otherwise, <c>false</c>.</value>
        [Category("Appearance")]
        [Browsable(true)]
        public bool UseValidation 
        {
            get { return _useValidation; } 
            set {_useValidation = value;} 
        }

        [Category("Appearance")]
        [Browsable(true)]
        public string WaitingText
        {
            get { return _waitingText; }
            set { _waitingText = value; }
        }

        /// <summary>
        /// Raises the <see cref="E:System.Web.UI.Control.Load"/> event.
        /// </summary>
        /// <param name="e">The <see cref="T:System.EventArgs"/> object that contains the event data.</param>
        protected override void OnLoad(EventArgs e)
        {
            StringBuilder sbValid = new StringBuilder();
            if (_useValidation)
            {
                sbValid.Append("if (typeof(Page_ClientValidate) == 'function') { ");
                sbValid.Append("if (Page_ClientValidate() == false) { return false; }} ");
            }

            sbValid.Append(string.Format("this.value = '{0}';", _waitingText));
            sbValid.Append("this.disabled = true;");
            sbValid.Append(Page.ClientScript.GetPostBackEventReference(this, null).ToString());
            sbValid.Append(";");

            Attributes.Add("onclick", sbValid.ToString());
            base.OnLoad(e);
        }
    }
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.