Capita spesso di gestire situazioni in cui click multipli su un button in pagina possono produrre effetti difficilmenti prevedibili. Il PageRequestManager, ossia il componente Javascript che si occupa della gestione dei postback asincroni, dà precedenza all'ultima richiesta pervenuta, cancellando eventuali altre in esecuzione. Purtroppo però, se queste ultime sono comunque pervenute al server, sono state in ogni caso processate e il risultato è spesso quello di ritrovarsi dati errati o record duplicati sulla base dati.
Il problema può essere gestito in vari modi, e uno di questi è quello di modificare tale comportamento di default con questo semplice snippet di codice Javascript:
<script type="text/javascript"><!-- var prm; function pageLoad() { prm = Sys.WebForms.PageRequestManager.getInstance(); prm.add_initializeRequest(initializeRequest); } function initializeRequest(sender, args) { if (prm.get_isInAsyncPostBack()) { args.set_cancel(true); } } --></script>
La funzione pageLoad ha un nome "riservato", e viene automaticamente invocata da ASP.NET AJAX al termine del caricamento della pagina. Al suo interno, viene recuperato il riferimento all'istanza del PageRequestManager e aggiunto un handler all'evento initializeRequest, che viene sollevato ogni volta che sopravviene una nuova richiesta di postback asincrono. In questo gestore, non dobbiamo far altro che verificare il valore della proprietà isInAsyncPostBack dello stesso PageRequestManager e, nel caso quest'ultimo sia già impegnato nell'esecuzione di un postback, cancellare la richiesta corrente.
L'esempio allegato contiene una pagina composta da una label che visualizza un contatore memorizzato in sessione, e un pulsante per incrementarlo. Si può notare come, abilitando e disabilitando questo script, il comportamento dell'applicazione in risposta a click multipli sia sensibilmente differente.
Questo semplice snippet di codice può essere tranquillamente aggiunto alla master page della nostra applicazione, in modo che tutte le pagine ne ereditino automaticamente i vantaggi. Va tuttavia detto che, in linea generale, non è corretto affidare alla sola logica lato client la consistenza delle operazioni lato server e che pertanto, anche su quest'ultimo, dovrebbero in ogni caso essere prese le eventuali contromisure per cui submit multipli non comportino errori funzionali.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Le novità di Angular 13 e del suo ecosistema
Eseguire uno scroll all'interno di una pagina Blazor
Ottimizzare il codice JavaScript con i Shorthand Patterns - terza parte
Terraform, Vue.js e Aws CloudFront
Eseguire task temporizzati tramite hosted service in ASP.NET Core
Parallelizzare le chiamate HTTP con async/await e le Promise in JavaScript
Ottimizzare il codice JavaScript con i Shorthand Patterns - prima parte
Utilizzare l'API del browser fetch
Web3, Smart Contract, Metamask e Web Application
Utilizzare le Promise in Javascript - seconda parte
Utilizzare il metodo reduce in JavaScript
Dichiarare una variabile in JavaScript con le parole chiave var, let e const
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Impostare un default custom per i metodi LINQ che tornano il valore di default
- Velocizzare l'installazione delle dipendenze in un workflow di GitHub
- YARP: un reverse proxy in ASP.NET Core
- Costruire applicazioni native per ogni dispositivo con .NET e Visual Studio