Data Annotation em C# (CSharp)

Aprendendo a usar Data Annotation para validar suas classes em C# (CSharp).


Autor : Antonio Carlos Ferreira de Azevedo
Postado em : 06/04/2016

Data Annotation


A validação dos dados é uma tarefa essencial em qualquer aplicação e validar seus dados pode se tornar um processo trabalhoso dependendo do tipo de aplicação, com a versão 4.0 da plataforma .NET temos a disposição os Data Annotation, vamos ver um pouco sobre esta ferramenta para utilizarmos em nossas Classe.


Vamos abordar os mais utilizados

Propriedade Descrição
Key Define a chave primaria
Required Significa campo obrigatório, se não for informado será mostrada a mensagem definida em ErrorMessage.
MinLength Tamanho mínimo do campo. Caso a regra seja violada, será exibida a mensagem no ErrorMessage.
StringLength Tamanho máximo do campo. Caso a regra seja violada, será exibida a mensagem no ErrorMessage.
Display Nome a ser mostrado em todas as interfaces de usuário.
DisplayFormat Formato a ser exibido na interfaces de usuário.
Range Define a faixa de dados aceita pela propriedade. Caso esteja fora da faixa é mostrado a mensagem definida em ErrorMessage.
RegularExpression Valida por expressão regular. Se não for valida é mostrado a mensagem definida em ErrorMessage.
Remote Faz uma validação remota no servidor utilizando JSon. Se não for valida é mostrado a mensagem definida em ErrorMessage.
você também pode definir campos adicionais em AdditionalFields colocando seus atributos separados por virgula, mas atenção os nomes dos atributos dever ser escritos da mesma maneira que foram escritos em seu modelo.
Compare Valida com base em outro atributo, utilizada para validar se duas senhas são iguais. Se os valores não forem iguais é mostrado a mensagem definida em ErrorMessage.


Se o que você procura não esta nesta lista você pode pesquisar outros atributos na Library da Microsoft


Exemplo de Classe utilizando as validações

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;

public class Cadastro
{
    [Key]   
    public int id { get; set; }

    [Required(ErrorMessage="Nome de Usuário deve ser informado!")]
    [StringLength(50, MinimumLength = 10, ErrorMessage = "Nome deve ter entre 10 e 50 caracteres!")]
    public string Nome { get; set; }

    [Display(Name = "Data Nascimento")]
    [Required(ErrorMessage = "Data deve ser preenchida")]
    [RegularExpression(@"^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|          (29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$", ErrorMessage = "Data invalida")]
    public string DataNascimento { get; set; }
  
    [Display(Name = "Horário Entrada")]
    [Required(ErrorMessage = "Hora invalida")]
    [RegularExpression(@"^([0-1][0-9]|[2][0-3]):([0-5][0-9])$", ErrorMessage = "Formato invalido (HH:MM)")]
    public string HoraInicio { get; set; }

    [Display(Name = "Salário")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:###,##0.00}")]
    public double? Salario { get; set; }

    [Display(Name = "E-mail")]
    [Required(ErrorMessage = "E-mail deve ser preenchido!")]
    [RegularExpression(@"^[a-zA-Z]+(([\'\,\.\- ][a-zA-Z ])?[a-zA-Z]*)*\s+<(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})>$|^(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})$", ErrorMessage = "Formato do E-mail Inválido")]
    [Remote("EmailUnico", "Home", ErrorMessage = "e-mail já cadastrado")]
    public string Email { get; set; }

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    [DataType(DataType.Date, ErrorMessage = "Uma data válida deve ser informada!")]
    public DateTime? Data { get; set; }

    [Display(Name = "Senha")]
    [Required(ErrorMessage = "Senha deve ser preenchida!")]
    [StringLength(15, MinimumLength = 4, ErrorMessage = "Senha deve ter entre 4 e 15 caracteres")]
    public string Senha { get; set; }

    [Display(Name = "Confirmar Senha")]
    [Compare("Senha", ErrorMessage = "Senhas informadas não conferem")]
    public string ConfirmarSenha { get; set; }
}


No caso do RegularExpression estamos utilizando uma expressão regular para gerar um e-mail valido, Exemplos de expressões regulares úteis.

No caso do Remote estamos chamando a action EmailUnico no Controller Home, onde verificamos em nossa base se o e-mail digita já esta cadastrado.

Exemplo de action para validação do e-mail

public ActionResult EmailUnico(string Email)
{
    boolean emailValido = false;
   
    emailValido = chamada a sua classe de verificacao de email com retorno (true/false)
 
    return Json(emailValido , JsonRequestBehavior.AllowGet);
}


Exemplo de action para validação do e-mail exibindo mensagem personalizada

public ActionResult EmailUnico(string Email)
{
    boolean emailValido = false;
   
    emailValido = chamada a sua classe de verificacao de email com retorno (true/false)
 
    if (emailValido  == true)
    {
       return Json(true, JsonRequestBehavior.AllowGet);
    }
    else
    {
       return Json(string.Format("E-mail '{0}' já esta cadastrado.", Email), JsonRequestBehavior.AllowGet);
    }
}


Podemos ainda criar nossas próprias validações, por Data Annotation, em nossa página você vai encontrar diversos atributos para validar datas, horas, e-mail, números entre outros, sinta-se a vontade e deixe seu comentário ele é muito importante..


Links Relacionados


Comentários

Thomaz em 28/03/2016 17:57:33
 

Estou precisando de expressão regular para validar datas, pode me ajudar ?


Antonio Azevedo (Administrador) em 06/04/2016 22:21:54
 

Adicionei RegularExpression para validar campos Data e Hora, utilizando campos string, você deve converter para data para gravar no banco de dados e converter novamente para string para salvar na Classe.


Antonio Azevedo (Administrador) em 08/06/2016 22:19:03
 

Melhoramos o material sobre Remote, agora você conta com exemplo para customizar sua mensagem de erro.


Victor em 14/06/2018 17:29:52
 

Estou precisando de expressao regular de Numero de Telefone


Antonio Azevedo (Administrador) em 22/06/2018 02:29:13
 

Verifique nossa postagem Mascaras com JQuery-Mask, lá vai acha o o que esta procurando http://www.codigoexpresso.com.br/Home/Postagem/40