[ASP.NET MVC] Estableciendo reglas de validación
Publicado por Julio Avellaneda en 09/22/2012
Uno de los puntos más importantes cuando se realizan aplicaciones Web es la de validar los datos ingresados por el usuario y todos aquellos datos que se envían a la base de datos, y en este punto al framework ASP.NET MVC permite definir muchas validaciones directamente en el modelo, y la ventaja de establecer estas reglas de validación en el modelo es que automáticamente se realizará la validación en el cliente como en el servidor, entonces vamos a revisar todo el proceso de validación, así que vamos a iniciar creando una clase que va actuar como nuestro modelo:
1: public class Cliente2: {3: public int ClienteId { get; set; }4: public string Nombre { get; set; }5: public string Apellido { get; set; }6: public string Email { get; set; }7: public int Edad { get; set; }8: public string SitioWeb { get; set; }9: }
Ahora vamos a crear el controlador, en este caso solo vamos a definir dos acciones:
1: public class ClienteController : Controller2: {3: public ActionResult Index()4: {5: return View();6: }7:8: public ActionResult Create()9: {10: return View();11: }12: }
En el momento la lógica de las acciones de los controladores no es importante, y ahora vamos a crear la vista para la acción Create:
1: @model Validando_Formularios.Models.Cliente2: @{3: ViewBag.Title = "Create";4: }5: <h2>Create</h2>6: @using (Html.BeginForm()) {7: @Html.ValidationSummary(true)8: <fieldset>9: <legend>Cliente</legend>10:11: <div class="editor-label">12: @Html.LabelFor(model => model.Nombre)13: </div>14: <div class="editor-field">15: @Html.EditorFor(model => model.Nombre)16: @Html.ValidationMessageFor(model => model.Nombre)17: </div>18:19: <div class="editor-label">20: @Html.LabelFor(model => model.Apellido)21: </div>22: <div class="editor-field">23: @Html.EditorFor(model => model.Apellido)24: @Html.ValidationMessageFor(model => model.Apellido)25: </div>26:27: <div class="editor-label">28: @Html.LabelFor(model => model.Email)29: </div>30: <div class="editor-field">31: @Html.EditorFor(model => model.Email)32: @Html.ValidationMessageFor(model => model.Email)33: </div>34:35: <div class="editor-label">36: @Html.LabelFor(model => model.Edad)37: </div>38: <div class="editor-field">39: @Html.EditorFor(model => model.Edad)40: @Html.ValidationMessageFor(model => model.Edad)41: </div>42:43: <div class="editor-label">44: @Html.LabelFor(model => model.SitioWeb)45: </div>46: <div class="editor-field">47: @Html.EditorFor(model => model.SitioWeb)48: @Html.ValidationMessageFor(model => model.SitioWeb)49: </div>50: <p>51: <input type="submit" value="Create" />52: </p>53: </fieldset>54: }55: <div>56: @Html.ActionLink("Back to List", "Index")57: </div>58: @section Scripts {59: @Scripts.Render("~/bundles/jqueryval")60: }
Y ahora si ejecutamos la aplicación y damos click en el botón Create nos damos cuenta que no existe ninguna validación… ahora como la idea es realizar la validación de los campos vamos a hacer uso de Data Annotations, en resumen Data Annotations lo que nos permite es establecer ciertas reglas para cada una de nuestras propiedades, entonces si modificamos la clase cliente y añadimos algunas reglas lo que tenemos es:
1: public class Cliente2: {3: public int ClienteId { get; set; }4:5: [Required(ErrorMessage="El nombre es requerido")]6: [Display(Name="Nombre Completo", Description="xxxxx")]7: public string Nombre { get; set; }8:9: [Required(ErrorMessage = "El apellido es requerido")]10: public string Apellido { get; set; }11:12: [Required(ErrorMessage = "El email es requerido")]13: [EmailAddress(ErrorMessage = "El email no tiene el formato correcto")]14: public string Email { get; set; }15:16: [Required(ErrorMessage = "La edad es requerida")]17: [Range(12,50,ErrorMessage="La edad debe estar entre los 12 y los 50 años")]18: public int Edad { get; set; }19:20: [Required(ErrorMessage="El sitio Web es requerido")]21: [Url(ErrorMessage="La dirección del sitio Web no es válida")]22: public string SitioWeb { get; set; }23: }
Revisando la clase y sus propiedades, tenemos algunas reglas establecidas:
- Required: Especifíca que el valor es requerido
- Display: El texto relacionado al campo, este será el texto del label que acompaña a la caja de texto.
- Range: Permite definir un rango de valores aceptados.
- EmailAddress: Valida que el valor ingresado tenga el formato correcto de una dirección de correo electrónico.
- Url: Valida que el valor ingresado sea una URL con formato valido.
Cada una de las anteriores opciones, permiten parametrizar el texto que se muestra cuando el valor ingresado es incorrecto o no cumple las reglas definidas, esto se logra dando un valor al atributo ErrorMessage.
Ahora, si lanzamos la aplicación y damos en Create las reglas establecidas se disparan y podemos ver los errores encontrados:
Y como se ve en las imágenes, las reglas definidas en el modelo funcionan perfectamente.
Posteriormente vamos a revisar como podemos crear atributos de validación personalizados.
Espero les sea de utilidad el post… Saludos!





[ASP.NET MVC] Estableciendo reglas de validación « MSExpertos escribió
[...] [ASP.NET MVC] Estableciendo reglas de validación [...]
[ASP.NET MVC] Estableciendo reglas de validación « MVPs de LATAM escribió
[...] [ASP.NET MVC] Estableciendo reglas de validación [...]
[ASP.NET MVC] Creando atributos de validación « Todo en ASP.NET escribió
[...] [ASP.NET MVC] Estableciendo reglas de validación [...]
[ASP.NET MVC] Creando atributos de validación « MVPs de LATAM escribió
[...] MVC podemos definir reglas directamente en el modelo utilizando Data Annotations (mira el post acá), sin embargo, es posible que necesitemos crear reglas adicionales para nuestros objetos de [...]
Resumen Post 2012 « Todo en ASP.NET escribió
[...] [ASP.NET MVC] Estableciendo reglas de validación [...]