Domanda

Ho alcuni controlli che ereditano dai pulsanti ASP.NET e utilizzano "onserverclick".

Se l'utente fa clic due volte, il pulsante attiva due eventi lato server.Come posso impedirlo?

Ho provato a impostare "this.disabled='true'" dopo il clic (nell'attributo 'onclick') tramite javascript, ma questo blocca anche il primo postback.

È stato utile?

Soluzione

Vedi questo esempio per disabilitare il controllo sul postback.Dovrebbe aiutarti a fare ciò che stai cercando di ottenere.

http://encosia.com/2007/04/17/disable-a-button-control-during-postback/

Altri suggerimenti

Non vuoi necessariamente mostrare il pulsante disabilitato nel postback.Vuoi assicurarti che non inviino accidentalmente due volte.Quindi disabilitare o nascondere il pulsante come risultato di a lato server l'azione è già troppo tardi nel gioco.A questo punto la seconda richiesta è già in arrivo.Devi farlo con JavaScript o assicurarti che il codice lato server non venga eseguito due volte.

In caso di un pannello di aggiornamento e di un pulsante all'interno di un modello FormView utilizzo il seguente approccio:

<script type="text/javascript">
    // Using that prm reference, hook _initializeRequest
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequestBuchung);

    // Abfangen von Mehrfachklicks auf Buttons für asynchrone Postbacks im Updatepanel
    function InitializeRequestBuchung(sender, args) {
        var arrButtonIds = ["ButtonInsert", "ButtonUpdate"];

        // Get a reference to the PageRequestManager.
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        if (prm.get_isInAsyncPostBack() & jQuery.inArray(args.get_postBackElement().id, arrButtonIds) > -1) {
            args.set_cancel(true);
        }
    }
</script>

Ciò annulla un postback successivo se attualmente è ancora attivo un postback asincrono.Funziona perfettamente.

Qualcun altro lo ha detto da qualche parte qui qualche giorno fa, e io sono d'accordo: usa Javascript semplicemente nascondere il pulsante invece di disabilitarlo;al suo posto potresti mostrare un'immagine "spinner", che consente all'utente di sapere cosa sta succedendo.

Invece di nascondermi, quello che ho fatto è stato scambiare i pulsanti usando javascript.Mostra un'altra immagine in grigio facendo clic sul primo pulsante.

Imposta la proprietà Button UseSubmitBehavior su false.Creare quindi una funzione OnClientClick che disabiliti il ​​pulsante.Sarebbe qualcosa del genere:

<script type="text/javascript">
   function disableFunctn(button){
       button.disabled = true;
   }
</script>
<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="disableFunctn(this);"/>

modo più veloce ed economico:

<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="this.disabled=true;"/>

Puoi anche provare ad esempio btnSave.Enable = false;quando viene premuto il pulsante e prima che l'elaborazione per il pulsante venga eseguita nella routine Evento clic.Se è necessario reimpostarlo per consentirne l'attivazione, è disponibile un pulsante separato che reimposta il pulsante per il riutilizzo.

Un altro metodo consiste nell'impostare il pulsante con la verifica in modo che all'utente venga chiesto se desidera salvare, dovrebbe apparire entrambe le volte.

Ancora un altro metodo sarebbe quello di contrassegnare la prima occorrenza e quindi impostare un popup per la seconda per verificare un secondo o un utilizzo successivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top