La gestione della validazione con ASP.NET MVC è demandata in parte al Controller ed in parte alla View, per le rispettive parti, utilizzando ovviamente il Model.
Se si fa il paragone con i Validator Control di ASP.NET, in ASP.NET MVC non è presente un controllo in grado di fare tutto, ma è necessario utilizzare un metodo specifico, Html.ValidationMessage, il cui primo parametro indica il nome del campo di validazione ed il secondo il testo da visualizzare. Questo è il codice che va inserito all'interno della View:
<%= Html.ValidationSummary("Si sono verificati degli errori.") %> <% using Html.BeginForm("Create", "TestController", FormMethod.Post) {%> Nome: <%= Html.TextBox("FirstName") %> <%= Html.ValidationMessage("FirstName", "*") %> ...form... <%}%>
Quando si opta per l'utilizzo di un modello strongly typed è necessario definire una classe Person tra i Model e poi aggiungere l'attributo Inherits in questo modo:
<%@ Page ... Inherits="System.Web.Mvc.ViewPage<Test.Models.Person>" %>
Così facendo è possibile specificare un Action in grado di accettare direttamente un'istanza di Person. Nel nostro caso si traduce nella possibilità di avere in automatico un oggetto di tipo ModelState corrispondente al nostro Model, su cui poter aggiungere, attraverso il metodo AddModelError, un eventuale errore, perchè è ASP.NET MVC a crearlo in automatico per ogni Model. Completa il discorso la proprietà IsValid, che indica se se sono presenti all'interno della collection degli errori. Il codice presente nel Controller sarà dunque simile a questo:
[AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(Person p) { // logica di validazione if (string.IsNullOrEmpty(person.FirstName.Trim())) { ModelState.AddModelError("FirstName", "Il nome è necessario"); } // azione da effettuare se i dati non sono validi: // richiamo nuovamente la View di registrazione, passando l'istanza if (!ModelState.IsValid) { return View("Register", person); } // View da visualizzare in caso di successo return View("Sucess"); }
Da sottolineare che utilizzando Html.ValidationSummary è possibile inserire, dove è posizionata la chiamata, la descrizione associata a ciascuna convalida non andata a buon fine, avendo quindi un riepilogo all'interno della View.
Per maggiori approfondimenti su ASP.NET MVC si veda:
http://mvc.aspitalia.com/
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire le chiamate a servizi esterni in ASP.NET Core e Blazor tramite Polly
Reagire alle modifiche della configurazione di ASP.NET Core
Generare un QR Code da ASP.NET Web API
Eseguire task temporizzati tramite hosted service in ASP.NET Core
Leggere il valore di un header della richiesta in ASP.NET Core 6
Avviare e arrestare programmaticamente un Hosted Service di ASP.NET Core
Usare l'option pattern per gestire la configurazione in ASP.NET Core
Iniettare servizi in un hosted service di ASP.NET Core
Gestire query string lunghe in ASP.NET Core
Configuration strongly typed anche per singleton con IOptionsMonitor in ASP.NET Core
I più letti di oggi
- Utilizzare la parola chiave var con lambda expression e method group in C# 10
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- devConf 2022 - Online
- Log streaming di una Azure Container App
- Agenda di #devconf22 del 26/05 quasi al completo! Ce n'è per tutti i gusti: #dotnet, #aspnetcore, #blazor, #terraform, #githubAltre informazioni e iscrizioni su => https://aspit.co/devconf-22