2010-06-22 24 views
5

Sono presenti moduli con pagamento nel sito ASP.NET, quando l'utente fa clic su asp: Button a volte lo invia poche volte. Voglio disabilitare questa funzionalità senza danneggiare il sito attuale di ASP.NET (con questo non intendo jQuery di fantasia, a meno che non sia molto semplice e non interferisca con la convalida integrata di ASP.NET)ASP.NET come disattivare il pulsante su invia?

grazie !!!

+0

vuoi che venga disabilitato sempre dopo il primo clic? – Samiksha

+0

@Samiksha, ho bisogno di disabilitare dopo il modulo di invio perché se disattivo dopo il primo clic è disabilitato quando faccio clic per convalidare i dati con convalida ASP.NET. – eugeneK

+0

Ho aggiornato la mia risposta, per favore controlla ora. cosa devi fare, prima di disabilitare il pulsante, devi controllare Page_ClientValidate() –

risposta

9

si può facilmente farlo sul pulsante lato client:

onClientClick="this.disabled=true;" 

È possibile anche usare l'approccio da Muhammad con questo:

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

Se questo non è ancora funzionante, è possibile avviare il postback prima di disabilitare il pulsante:

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

@Oded, soluzione molto intelligente, come ... –

+0

@Oded, cool thanks! – eugeneK

+1

@Oded, non funziona in Chrome dopo la convalida di ASP.NET. – eugeneK

1

si potrebbe andare per blockUI. è davvero bello, in quanto blocca l'interfaccia utente completa, non solo il pulsante - in modo che un utente non possa fare clic su un altro pulsante (ad esempio, si desidera salvare ... richiede un po 'di tempo ... clic dell'utente su Elimina nel frattempo)

+0

Il problema con questo approccio è. Ci sono due cose ASP: Button fa. 1. Convalida JS utilizzando i validatori ASP.NET. 2.Triggering OnClick = "" questo script può essere eseguito sul client, quindi fallirà la convalida JS. – eugeneK

+0

1. Non penso, che questo sarebbe un problema. è possibile ridefinire la funzione di convalida del client ed eseguire il blocco dopo la convalida è ok. 2. come, per l'amor di dio, puoi attivare un evento server sul lato client? riassunto: dovresti dare più informazioni e qualche codice (code-behind & markup e finale html). –

+0

tra l'altro - c'è un altro approccio: perché non ridefinire l'add-handler del modulo. se il modulo viene inviato dall'ultima istanza (ad esempio la convalida del client), puoi bloccare l'interfaccia utente, no? –

2

Creare un metodo statico:

/// <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() + "}"); 
} 

Creare un modulo e mettere un pulsante nel vostro modulo (Ricordate di impostare la proprietà ValidationGroup se non v'è più di una forma/inviare):

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

Chiamarlo nel caricamento della pagina:

CommonFunctions.disableSubmitButton(btnSubmit); 
2
onClientClick="if(Page_ClientValidate()){__doPostBack;this.disabled=true;}" 
UseSubmitBehavior="false" 
2

So che questa è una vecchia questione, ma tutte le risposte fallire in alcune circostanze. Principalmente rischi di ottenere un errore "Page_ClientValidate non definito" nel browser.

Questo approccio funziona:

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

Nessuna delle altre risposte ha funzionato nella mia situazione, ma non ha funzionato. Grazie. –

Problemi correlati