Desarrollando

en tu idioma

Escrito por: TiraCodigo

En esta etapa del tutorial, veremos cual es la forma de realizar la validación del modelo en MVC, para esto retomaremos el ejemplo del ultimo punto, si todavía no lo haz leído, aqui te dejo el link

Recordando un poco como tenemos el ejemplo el anterior, en el modelo tenemos lo siguiente:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace HelpersMVC.Models
{
    public class Persona
    {
        public string Nombre { get; set; }
        public string Apellidos { get; set; }
        public string Sexo { get; set; }
        public string Edad { get; set; }
        public bool Vive { get; set; }
    }
}

Algo importante, es que para usar los Data Anotations debemos de incluir el using System.ComponentModel.DataAnnotations;

Como podemos ver, solo tenemos las propiedades de la clase Persona, hasta aqui todo bien, ahora que pasa si queremos realizar alguna validación sobre estos campos, lo que tendríamos que hacer es mediante etiquetas que se llaman Data Anotations realizaremos dichas validaciones, por ejemplo, si queremos que no se permitan tener valores varios en el Nombre y el Apellido agregaríamos la etiqueta [Required], quedando de la siguiente manera: 

[Required]
public string Nombre { get; set; }
[Required]
public string Apellidos { get; set; }

Como recordaremos, en el ejemplo anterior creamos la vista, con las propiedades del modelo con el método que bindeaba los controles con el modelo utilizando los  TextBoxFor, RadioButtonFor, DropDownListFor, etc, razón por la cual el framework automáticamente realizara la magia de validar estos campos con tan solo incluir estas etiquetas en el modelo, adicional a lo anterior tenemos que agregar en la vista la seccion en la cual se mostraran los errores, esto lo hacemos con la etiqueta  @Html.ValidationSummary("", new { @class = "text-danger" }), la vista quedaria mas o menos asi:

@model HelpersMVC.Models.Persona

@{
    ViewBag.Title = "Home Page";
    var lstValores = new List<SelectListItem>(); 
    for (int i=0;i<100;i++)
    {
        lstValores.Add(new SelectListItem() { Value = i.ToString(), Text = i.ToString() });
    }
}

<div class="jumbotron">
    <h1>Datos de ejemplo</h1>
    <br />
    <br />
    @using (Html.BeginForm("Index", "Home", FormMethod.Post))
    {
        @Html.ValidationSummary("", new { @class = "text-danger" })
        <br />
        @Html.LabelFor(m => m.Nombre)
        @Html.TextBoxFor(m => m.Nombre)
        <br />
        @Html.LabelFor(m => m.Apellidos)
        @Html.TextBoxFor(m => m.Apellidos)
...

Si realizamos una prueba, en donde dejemos los campos vacíos veremos lo siguiente:

 

 Existen varios data anotations, los cuales puedes utilizar para realizar las validaciones, a continuación una lista con los mas comunes:

  • Required: El campo tiene que llenarse obligatoriamente
  • Range: Define un valor máximo y mínimo en valores numéricos
  • DisplayName: Especifica el nombre al mostrar para el campo
  • MinLength: Indica el largo mínimo de una cadena de texto
  • MaxLength: Indica el largo máximo de una cadena de texto
  • EmailAddress: Valida que la cadena sea un email valido en su formato 

 

Aqui un ejemplo utilizando varias de las anteriores

...
[Required]
[MinLength(length:1)]
[MaxLength(length:50)]
public string Nombre { get; set; }
[Required]
[MinLength(length: 1)]
[MaxLength(length: 50)]
public string Apellidos { get; set; }
...

De igual manera, los Data Annotations, tienen varios parámetros, entre ellos la personalización del mensaje de error, esto lo definimos utilizando la propiedad ErrorMessage, aqui un ejemplo:

...
[Required(ErrorMessage ="El campo Nombre no puede estar vacio")]
[MinLength(length:1)]
[MaxLength(length:50)]
public string Nombre { get; set; }
...

Lo cual se vería mas o menos así:

Como vemos los Data Annotations nos hacen la vida mas fácil al tratar los temas de validación, a continuación te dejo los links con el ejemplo funcionando para que lo puedas probar

Ver la pagina en ejecución

Descargar el código fuente del ejemplo