5 votes

ASP.NET comment désactiver le bouton lors de la soumission ?

J'ai des formulaires de paiement dans un site ASP.NET, lorsque l'utilisateur clique sur le bouton asp:Button, il soumet parfois plusieurs fois le formulaire. Je veux désactiver cette fonctionnalité sans nuire au site ASP.NET actuel (je veux dire pas de jQuery fantaisiste, à moins qu'il ne soit très basique et n'interfère pas avec la validation intégrée d'ASP.NET).

merci !!!

9voto

Oded Points 271275

Vous pouvez facilement le faire sur le bouton côté client :

onClientClick="this.disabled=true;"

Vous pouvez également utiliser l'approche de Muhammad :

onClientClick="if(Page_ClientValidate()){this.disabled=true;}"

Si cela ne fonctionne toujours pas, vous pouvez lancer le postback vous-même avant de désactiver le bouton :

onClientClick="if(Page_ClientValidate()){__doPostBack;this.disabled=true;}"

2voto

Valerio Gentile Points 71

Créer une méthode statique :

/// <summary>
/// Disable the button on submit. Remember to set up the validationGroup property if there is more than one form/submit
/// </summary>
/// <param name="objButton">The submit button object</param>
public static void disableSubmitButton(Button objButton)
{
    objButton.CausesValidation = false;
    string validationGroup = objButton.ValidationGroup;
    if (string.IsNullOrEmpty(validationGroup))
        objButton.Attributes.Add("onclick", "if (Page_ClientValidate()) {this.value=\"Processing...\";this.disabled=true;" + objButton.Page.ClientScript.GetPostBackEventReference(objButton, "").ToString() + "}");
    else
        objButton.Attributes.Add("onclick", "if (Page_ClientValidate(\"" + validationGroup + "\")) {this.value=\"Processing...\";this.disabled=true;" + objButton.Page.ClientScript.GetPostBackEventReference(objButton, "").ToString() + "}");
}

Créez un formulaire et placez un bouton dans votre formulaire (n'oubliez pas de définir la propriété validationGroup s'il y a plus d'un formulaire/soumission) :

<asp:Button runat="server" ID="btnSubmit" OnClick="btnSubmit_Click" />

L'appeler dans le chargement de la page :

CommonFunctions.disableSubmitButton(btnSubmit);

2voto

Tanya Points 21
onClientClick="if(Page_ClientValidate()){__doPostBack;this.disabled=true;}" 
UseSubmitBehavior="false"

2voto

Je sais qu'il s'agit d'une vieille question, mais toutes les réponses échouent dans certaines circonstances. Vous risquez surtout d'obtenir une erreur "Page_ClientValidate is not defined" dans le navigateur.

Cette approche fonctionne :

public static void DisableSubmitButton(Button button)
{
    button.Attributes.Add("onclick", "this.disabled=true;" + button.Page.ClientScript.GetPostBackEventReference(button, String.Empty));
}

1voto

Andreas Niedermair Points 8907

Vous pouvez opter pour blocUI . c'est vraiment bien, car cela bloque toute l'interface utilisateur, pas seulement le bouton - de sorte que l'utilisateur ne peut pas cliquer sur un autre bouton (par exemple, vous voulez sauvegarder ... cela prend un certain temps ... l'utilisateur clique sur supprimer pendant ce temps).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X