web-dev-qa-db-fra.com

Comment désactiver un bouton après le 1er clic

J'ai l'événement onclick suivant pour un bouton. une fois que cet événement est terminé, je veux désactiver le bouton. Quelqu'un peut-il m'aider à comprendre comment le faire?

Voici le code que j'exécute sur l'événement buttonclick.

protected void Button3_Click(object sender, EventArgs e)
{

    if (Session["login"] != null && Session["db"] != null)
    {

        digit b = new digit();
        String digitformed = b.formdigit(this.DropDownList1, this.TextBox1, this.TextBox2);

        chekcount c = new chekcount();
        int count = c.getmaxcountforjud_no(digitformed);
        int addtocount = count + 1;

        String name = Session["login"].ToString();
        String databs = Session["db"].ToString();
        String complex_name = name + databs;

        if (DropDownList2.SelectedItem.Text != "New")
        {
            update u = new update();
            u.update1(this.Editor1, digitformed, this.TextBox3, complex_name, name, this.DropDownList2);
            Response.Write(@"<script language='javascript'>alert('Updated')</script>");

        }
        else
        {
            save d = new save();
            d.dosave(this.Editor1, addtocount, digitformed, this.TextBox3, complex_name, name);
            Response.Write(@"<script language='javascript'>alert('Saved')</script>");

        }
    }
    else
    {
        Response.Redirect("log.aspx");
    }
}

Voici le bouton que je veux désactiver.

<asp:Button ID="Button3" runat="server" Text="Save" onclick="Button3_Click" 
                    Visible="False" />
9
Ishan

As-tu essayé?:

protected void Button3_Click(object sender, EventArgs e)
{
   Button3.Enabled = false;
   //rest of code
}
15
Reniuz

Utilisez les propriétés OnClientClick et UseSubmitBehavior du contrôle de bouton.

<asp:Button runat="server" ID="BtnSubmit" 
  OnClientClick="this.disabled = true; this.value = 'Submit in progress...';" 
  UseSubmitBehavior="false" 
  OnClick="BtnSubmit_Click" 
  Text="Click to Submit" />

OnClientClick vous permet d'ajouter un script OnClick côté client. Dans ce cas, le JavaScript désactivera l'élément button et changera sa valeur de texte en un message de progression. Une fois la publication terminée, la page nouvellement rendue rétablira le bouton dans son état initial sans travail supplémentaire.

La désactivation d’un bouton de soumission côté client a pour inconvénient d’annuler la soumission du navigateur, et donc la publication. Définir la propriété UseSubmitBehavior sur false indique à .NET d'injecter le script client nécessaire pour déclencher la publication de toute façon, au lieu de s'appuyer sur le comportement de soumission du formulaire du navigateur. Dans ce cas, le code qu'il injecte serait:

__doPostBack('BtnSubmit','')

HTML redéfini:

<input type="button" name="BtnSubmit" 
  onclick="this.disabled = true; this.value = 'Submitting...';__doPostBack('BtnSubmit','')"
  value="Submit Me!" id="BtnSubmit" />

Cela devrait vous donner le comportement souhaité.

De: http://encosia.com/disable-a-button-control-during-postback/ Crédit: Dave Ward (Twitter: @Encosia)

28
Prafulla

Vous devez définir la propriété Enabled du bouton dans le code côté serveur, comme indiqué par d'autres afficheurs. Toutefois, si vous essayez d’empêcher plusieurs envois à partir du même bouton, vous aurez besoin d’une tactique légèrement différente. 

Ajouter une méthode à votre classe:

static void DisableButtonDuringPostback(Page page, Button control)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("this.disabled = true;");
    sb.Append(page.ClientScript.GetPostBackEventReference(control, control.ID.ToString()));
    sb.Append(";");

    control.Attributes.Add("onclick", sb.ToString());

}

Dans Page_Load, ajoutez

DisableButtonDuringPostback(this.Page, Button3);
5
Dave
<asp:Button  onclick="Button3_Click" ID="Button3" runat="server" Text="Save"
OnClientClick="this.disabled = true; this.value = 'please wait ..';" 
UseSubmitBehavior="false"     />
4
Iman Abidi
   ///count number of button click
    var counter = 0;
    function countclickbutton() {
        counter++;
        if (counter > 1) {
            alert("proessing..please wait.");
//do not allow to again click
            return false;
        }
        else {

            return true;
        }
    }

appelez ceci onClientClick of button

2
Neha

Voir le code marqué

protected void Button3_Click(object sender, EventArgs e)
{

    ** if (Session["Clicked"] == null)
        Session["Clicked"] = true;
    else
    {
        Button3.Enabled = false;
        return;
    } **


    if (Session["login"] != null && Session["db"] != null)
    {

        digit b = new digit();
        String digitformed = b.formdigit(this.DropDownList1, this.TextBox1, this.TextBox2);

        chekcount c = new chekcount();
        int count = c.getmaxcountforjud_no(digitformed);
        int addtocount = count + 1;

        String name = Session["login"].ToString();
        String databs = Session["db"].ToString();
        String complex_name = name + databs;

        if (DropDownList2.SelectedItem.Text != "New")
        {
            update u = new update();
            u.update1(this.Editor1, digitformed, this.TextBox3, complex_name, name, this.DropDownList2);
            Response.Write(@"<script language='javascript'>alert('Updated')</script>");

        }
        else
        {
            save d = new save();
            d.dosave(this.Editor1, addtocount, digitformed, this.TextBox3, complex_name, name);
            Response.Write(@"<script language='javascript'>alert('Saved')</script>");

        }
    }
    else
    {
        Response.Redirect("log.aspx");
    }
}
2
Shai

si vous voulez le faire en utilisant jquery que

$('#button3').attr("disabled", true); 
1
Pranay Rana

Ceci est un ancien post, mais je ne pense pas qu'il ait été complètement répondu.

Premièrement, dans ASP.NET WebForms, vous envoyez une demande HTTP GET au serveur Web, qui traite votre demande et génère le code HTML côté client que le navigateur doit restituer.

Lorsque vous interagissez avec un contrôle côté serveur, les valeurs sont contenues dans le champ de saisie caché VIEWSTATE des propriétés (tel que le booléen de Enabled).

Lorsque vous cliquez sur un bouton, il envoie une demande HTTP POST au serveur Web situé sur la même page. C'est pourquoi l'événement Page_Load est déclenché lorsque vous cliquez sur le bouton.

Une fois que la demande HTTP POST a été traitée, elle retournera le code HTML que le navigateur pourra restituer. Pour cette raison, si vous avez le code suivant dans votre événement Page_Load:

if (Page.IsPostBack) { Button3.Enabled = false; }

Il ne sera pas indiqué à l'utilisateur qu'il a été désactivé jusqu'à ce que la demande HTTP POST ait été traitée et que le code côté client mis à jour ait été renvoyé.

D'après la question initiale, il semblait que le serveur prenait plusieurs secondes pour renvoyer une réponse. Par conséquent, plusieurs événements de publication pouvaient être déclenchés en cliquant à plusieurs reprises sur le bouton.

Une façon simple (mais ennuyeuse) de résoudre votre problème serait d’avoir une variable HTML button exécutant une variable function en JavaScript qui la désactive et déclenche l’événement onclick d’un contrôle côté serveur. Le problème avec ceci serait alors que lorsque la demande HTTP POST renvoie une réponse, elle rendrait le HTML button normal activé. Pour résoudre ce problème, vous pouvez simplement le désactiver en JavaScript à l'aide de code ASP.NET intégré. Voici un exemple:

Fichier .ASPX

<button id="clientButton" onclick="javascript:update();" />
<asp:Button ID="serverButton" OnClick="serverButton_OnClick" runat="server" />
<script type="text/javascript">
<% if (Page.IsPostBack) { %>
document.getElementById("clientButton").enabled = false;
<% } %>
function update() {
    document.getElementById("clientButton").enabled = false;
    document.getElementById("<%= serverButton.ClientID %>").click();
}
</script>
<style type="text/css">
#<%= serverButton.ClientID %> {
    visibility: hidden;
    display: none;
}
</style>



Fichier .ASPX.CS

protected void Page_Load(object sender, EventArgs e) 
{
    if (Page.IsPostBack) 
    {
        // Triggered when serverButton has 'javascript:click()' triggered
    }
}
0
Nathangrad

Pour les applications WPF

Button1.IsEnabled = false;  // Replace Button1 with your button name, false disables button
0
Sridharan