VALIDARE E PERSISTERE I DATI

VISUALIZZARE E PERSONALIZZARE GLI ERRORI DI VALIDAZIONE

NET CORE

La validazione è intesa lato server, questo perché la correttezza dei dati viene verificata non nel Browser ma nell’applicazione ASP.NET Core. Il problema di ciò che abbiamo implementato sino adesso è che se anche la validazione non ha avuto successo, l’utente non viene avvisato in alcun modo. Microsoft ha predisposto dei TagHelper appositi per visualizzare gli errori di validazione.

Asp Validation for
Personalizzare gli errori
Validation Summary
Validation Summary
Errori personalizzati

LA VALIDAZIONE LATO CLIENT

La validazione lato server è essenziale e non dovremmo mai e poi mai farne a meno. C’è da dire tuttavia che tale validazione non offre una buona esperienza utente in quanto l’utente avrebbe notifica degli errori solo dopo aver inviato le informazioni al server. Vediamo come aggiungere la validazione lato client, ossia prima che il form venga inviato. L’attributo asp-for aggiunge anche preziose informazioni nell’HTML e che riguardano tutte le regole di validazione che abbiamo impostato.

asp-for

Per utilizzare la validazione lato client ci servono un paio di librerie, la prima jquery-validation, mentre la seconda jquery-validation-unobtrusive. Questa libreria è di Microsoft.

Libreria validazione lato client

Questo è il codice della partial view _Validation, richiamata dalla View Create.cshtml. È inoltre necessario aggiungere @RenderSection(“Scripts”, required: false) nella View _Layout.cshtml.

Partial View

IMPEDIRE LA CREAZIONE DI CONTENUTI DUPLICATI

Si tratta di andare a verificare nel database se quel titolo esiste già. Vediamo prima di tutto come si crea una Data Annotation personalizzata.

Data Annotation Personalizzata
Data Annotation difetti

Questa è una tecnica non consigliata proprio perché non supporta la dependency injection e l’esecuzione asincrona. Ci sono inoltre problemi di concorrenza. Essendo ASP.NET Core una tecnologia Multi-Thread può capitare che due Thread concorrenti vadano a creare lo stesso corso.

Concorrenza

Una soluzione ci viene offerta dal database creando un vincolo UNIQUE sul titolo.

UNIQUE

Vediamo il blocco TRY-CATCH che cattura l’errore SQLite dovuto alla violazione del vincolo UNIQUE nel metodo CreateCourseAsync di AdoNetCourseService.

Exception

Vediamo il codice del Controller.

Controller

VERIFICARE LATO CLIENT L’ESISTENZA DI UN TITOLO

VINCOLO UNIQUE

La verifica lato Client e la verifica lato Server hanno scopi differenti, quella fatta lato client supporterà l’utente durante la digitazione del form, quella lato server ha lo scopo di proteggere il nostro database ed evitare che ci finiscano dentro valori non validi.

Lato Client

Vediamo la Data Annotation che ci consente di inviare richieste AJAX per la verifica lato client.

Remote

Guarda tutti i metodi implementati nel controller e nei servizi applicativi.

Validazione lato server

LINK AL CODICE SU GITHUB

GITHUB

Scaricare il codice della sezione15 o clonare il repository GITHUB per avere a disposizione tutte le sezioni nel tuo editor preferito.