La unobtrusive validation ha il pregio di mantenere separato il markup HTML dal codice javascript necessario a implementare le logiche di validazione lato client. Ciò è possibile grazie a una serie di attributi personalizzati, identificati dal prefisso data-val-*, che vengono automaticamente aggiunti agli elementi che devono essere validati:
<div class="editor-field"> <input type="text" value="" id="FirstName" data-val="true" data-val-required="The FirstName field is required." /> <span data-valmsg-for="FirstName" data-valmsg-replace="true"></span> </div>
L'engine responsabile della unobtrusive validation, al caricamento della pagina, effettua automaticamente il parsing di questi attributi, preoccupandosi poi di aggiungere gli handler e le logiche di controllo necessarie.
Quando carichiamo una view tramite AJAX, per esempio sfruttando l'helper Ajax.ActionLink, l'operazione di parsing di questi attributi è stata già eseguita e, pertanto, il risultato è che la validazione lato client non sarà attiva. Per evitare questo problema, è sufficiente eseguire un'opportuna funzione Javascript al termine del caricamento:
<script type="text/ecmascript"> function initializeValidation() { $.validator.unobtrusive.parse('#contentDiv'); } </script> <div> @Ajax.ActionLink("New person", "Create", new AjaxOptions() { UpdateTargetId = "contentDiv", OnSuccess="initializeValidation" }) </div> <div id="contentDiv"></div>
Nella codice in alto, abbiamo definito una funzione initializeValidation che forza la rilettura degli attributi della unobtrusive validation sul contenuto di contentDiv. Essa verrà automaticamente eseguita al termine del caricamento della nuova view, dato che l'abbiamo referenziata nelle AjaxOptions utilizzate per impostare l'helper.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Load test di ASP.NET Core con k6
Definire stili a livello di libreria in Angular
Usare Refit e Polly in Blazor per creare client affidabili e fortemente tipizzati
Copiare automaticamente le secret tra più repository di GitHub
.NET Conference Italia 2023
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Utilizzare database e servizi con gli add-on di Container App
Utilizzare i primary constructor di C# per inizializzare le proprietà
Recuperare un elemento inserito nella cache del browser tramite API JavaScript
Utilizzare la libreria Benchmark.NET per misurare le performance
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Implementare il throttling in ASP.NET Core