Immaginiamo una semplice Web Form costituita da uno o più controlli di input ed un button per l'invio dei dati e salvataggio degli stessi in una base dati.
In particolari condizioni (connessione dell'utente particolarmente lenta, lunghi tempi di risposta da parte del server, ecc.) può succedere che l'utente, non percependo alcuna risposta da parte della web application, sia portato a fare nuovamente click sul bottone, scatenando un altro postback e, di conseguenza, creando inserimenti multipli nel database.
Per risolvere questo problema è necessario associare poche istruzioni JavaScript all'evento OnClientClick del button per disabilitare (lato client) il tasto all'invio del modulo (qualora l'eventuale validazione del form abbia avuto esito positivo).
Nel codice della classe corrispondente alla pagina che ospita un ipotetico button:
<asp:Button ID="Button1" runat="server" Text="Invia" />
dovremo aggiungere (ad esempio nell'evento OnLoad della pagina stessa) il seguente codice:
Button1.OnClientClick = "if(typeof(Page_ClientValidate)=='function' && !Page_ClientValidate()){return false;}" + "this.value='Attendere...';" + "this.disabled=true;" + ClientScript.GetPostBackEventReference(Button1, "") + ";";
dove il metodo "GetPostBackEventReference" della classe ClientScriptManager (referenziata dalla proprietà ClientScript della classe Page) restituisce la stringa usata nell'evento client per scatenare il postback al server.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.