- Learn
- Guida ASP.NET MVC
- Validazione dei dati e gestione degli errori
Validazione dei dati e gestione degli errori
Nella nostra panoramica sulla gestione dei form in ASP.Net MVC ci siamo occupati di raccogliere i dati e di inserirli nel database, tralasciando, per semplicità, una componente tuttavia fondamentale in scenari che includono l’interazione con l’utente: la validazione dell’input.
Ogni volta in cui ci troviamo ad accettare informazioni tramite form, infatti, dobbiamo preoccuparci di controllare che questi dati siano completi e non contengano codici malevoli.
In ASP.NET MVC possiamo scegliere di delegare il compito di vigilanza sia al Model, includendo al suo interno delle regole di validazione, sia al Controller, integrando il meccanismo all’interno delle azioni.
Scegliendo la prima opzione avremo un codice fortemente strutturato e molto flessibile: se in futuro decidessimo di modificare le classi del Model avremmo infatti soltanto bisogno di aggiornare le regole di validazione all’interno di quest’ultimo, senza dover agire sulle altre parti dell’applicazione.
Per progetti molto semplici non vale la pena implementare un sistema di questo tipo, che può risultare abbastanza complesso. Nel nostro esempio ci affideremo quindi alle azioni del controller per effettuare una rudimentale validazione dell’input.
In particolare, la nostra azione dovrà controllare i dati e mostrare nuovamente all’utente il form nel caso in cui si verifichino degli errori. Vediamo quindi come implementare queste funzionalità all’interno dell’azione vista in precedenza per la modifica di una immagine:
[AcceptVerbs(HttpVerbs.Post)] public ActionResult Edit(int id, FormCollection values) { // Preleva l'immagine dal database GalleryDataContext context = new GalleryDataContext(); GalleryImage image = context.GetImageById(id); try { if (image == null) throw new Exception("Immagine non trovata."); // Controlla che tutti i campi richiesti siano stati inseriti if (string.IsNullOrEmpty(values["FileName"])) ModelState.AddModelError("FileName", "Nome richiesto"); if (string.IsNullOrEmpty(values["FileExtension"])) ModelState.AddModelError("FileExtension", "Estensione richiesta"); if (ModelState.IsValid) { // Tutto ok, aggiorna l'immagine UpdateModel<GalleryImage>(image); context.SubmitChanges(); // Reindirizza l'utente all'immagine aggiornata return RedirectToAction("Detail", new { id = image.ImageId }); } } catch (Exception ex) { // Si è verificato qualche errore ModelState.AddModelError("Errore", ex); } // Mostra di nuovo la vista return View(); }
La modifica più consistente riguarda l’aver inserito quasi tutta la logica dell’azione all’interno di un blocco Try..Catch
: così facendo saremo al sicuro da tutte le eccezioni che potrebbero essere generate dal nostro codice. Le prime righe all’interno del blocco Try
controllano che l’utente abbia inserito tutti valori richiesti all’interno del form. Nel caso in cui un campo non sia stato compilato correttamente verrà aggiunto un errore all’interno della collection ModelState
.
ModelState
è una proprietà dei controller deputata alla gestione di errori che possono avvenire all’interno del Model. Possiamo aggiungere un errore all’interno del ModelState
attraverso la seguente sintassi:
ModelState.AddModelError("nome_proprietà", "testo di errore");
Per controllare la validità del ModelState
è sufficiente verificare il valore della proprietà IsValid
:
if (ModelState.IsValid) { // Model state valido } else { // C'è qualche errore }
Come vedremo tra poco, la vera forza di questo sistema risiede nella forte integrazione con alcuni helper HTML nelle viste.
Se vuoi aggiornamenti su Validazione dei dati e gestione degli errori inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
Emanuele Delbono, da C# a Ruby
Come passare C# a Ruby e vivere felici