[ASP.NET MVC] Estableciendo reglas de validación

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 Cliente
   2:  {
   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 : Controller
   2:  {
   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.Cliente
   2:  @{
   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 Cliente
   2:      {
   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:

image

image

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!

You may also like...

5 Responses

  1. September 25, 2012

    […] [ASP.NET MVC] Estableciendo reglas de validación […]

  2. October 5, 2012

    […] [ASP.NET MVC] Estableciendo reglas de validación […]

  3. November 18, 2012

    […] [ASP.NET MVC] Estableciendo reglas de validación […]

  4. November 21, 2012

    […] 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 […]

  5. December 19, 2012

    […] [ASP.NET MVC] Estableciendo reglas de validación […]

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: