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.
Approfondimenti
Implementare il throttling in ASP.NET Core
Load test di ASP.NET Core con k6
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Recuperare un elemento inserito nella cache del browser tramite API JavaScript
Filtrare e rimuovere gli elementi dalla cache del browser tramite le API JavaScript
Generare file per il download da Blazor WebAssembly
Short-circuiting della Pipeline in ASP.NET Core
Eseguire operazioni con timeout in React
I più letti di oggi
- Utilizzare Docker Compose con Azure App Service
- Modernizzare le applicazioni WPF e Windows Forms con Blazor
- annunciato #netstandard 2.1. .NET Core lo supporterà a partire da #netcore3, così come le prossime versione di #xamarin, #mono e #unity.il supporto per #netfx 4.8, invece, non ci sarà. https://aspit.co/bq2
- Steel Style CheckBox per Silverlight 4.0
- Utilizzare QuickGrid di Blazor con Entity Framework