Una delle funzionalità in assoluto più interessanti di ASP.NET MVC 3 è denominata remote validation e consiste nella possibilità di effettuare una validazione client-side dell'input dell'utente tramite l'invocazione di un metodo lato server.
Supponiamo ad esempio di aver registrato una pagina in cui un nuovo cliente di un sito eCommerce, possa creare un proprio profilo. Tra i vari campi, è necessario specificare un indirizzo email, che ovviamente non deve essere stato utilizzato in precedenza per la registrazione di un altro utente. Si tratta di una verifica che non è immediato effettuare sul client, visto che comunque la logica richiede un accesso a database.
In ASP.NET MVC 3, invece, tutto ciò che dobbiamo fare è decorare la proprietà Email del nostro model con il nuovo RemoteAttribute:
public class User { [Required] [Remote("EmailIsUnique", "User", ErrorMessage = "L'indirizzo email deve essere univoco")] public string Email { get; set; } // .. altro codice qui .. }
Nel codice in alto, ad esempio, abbiamo indicato che questa proprietà dovrà essere validata tramite la action EmailIsUnique di UserController, restituendo il messaggio specificato in caso di dato non corretto. Il metodo EmailIsUnique accetta come parametro l'indirizzo email e restituisce un JsonResult con il risultato della validazione:
public class UserController : Controller { // .. altro codice qui .. [HttpGet] public JsonResult EmailIsUnique(string email) { var res = true; if (email == "cradle@aspitalia.com") res = false; return Json(res, JsonRequestBehavior.AllowGet); } }
Così facendo, semplicemente abilitando la validazione client-side e l'unobtrusive javascript (attive per default nel template di Visual Studio 2010), la pagina effettuerà automaticamente una chiamata AJAX al metodo EmailIsUnique, tramite jQuery.ajax, per verificarne la correttezza.
Attenzione al fatto che, per default, tale chiamata avviene tramite il verbo HTTP GET. In generale ASP.NET MVC non consente l'esecuzione di action che restituiscono un risultato Json con questo verbo, ed è questa la ragione per cui abbiamo dovuto abilitarlo tramite JsonRequestBehavior.AllowGet. Una soluzione alternativa è quella di far sì che l'invocazione venga eseguita in HTTP POST, specificandolo sull'attributo nel modo seguente:
public class User { [Required] [Remote("EmailIsUnique", "User", HttpMethod="POST", ErrorMessage = "L'indirizzo email deve essere univoco")] public string Email { get; set; } // .. altro codice qui .. }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Utilizzare Azure AI Studio per testare i modelli AI
Semplificare il deployment di siti statici con Azure Static Web App
Routing statico e PreRendering in una Blazor Web App
Generare token per autenicarsi sulle API di GitHub
Gestire i null nelle reactive form tipizzate di Angular
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Eseguire una GroupBy per entity in Entity Framework
Miglioramenti nell'accessibilità con Angular CDK
Recuperare un elemento inserito nella cache del browser tramite API JavaScript
Usare un KeyedService di default in ASP.NET Core 8
Generare file per il download da Blazor WebAssembly
I più letti di oggi
- Sblocca le performance della tua applicazione con .NET 8
- Utilizzare WebAssembly con .NET, ovunque
- Gestire la cancellazione di una richiesta in streaming da Blazor
- L'evoluzione di Blazor in .NET 8
- gRPC con .NET
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Blazor: Security
- Utilizzare QuickGrid di Blazor con Entity Framework