Andei estudando um pouco de ASP.NET MVC, e para quem conhece, sabe que um dos recursos básicos que se vê logo de início é como usar atributos para validação dos modelos.
As validações básicas como campos requeridos, tamanho, expressão regular entre outros, já existem no próprio framework. Então para você determinar que um campo é requerido por exemplo, você decora a propriedade desta forma:
public class Pessoa
{
[Required]
public string Nome { get; set; }
}
Mas eu estava interessado em criar alguns customizados, pois seria bem prático poder decorar campos como CNPJ, CPF, CEP e obter a validação específica direto no modelo.
Felizmente isso é muito fácil. Basta criar uma classe derivada de System.ComponentModel.DataAnnotations.ValidationAttribute e sobrescrever o método IsValid retornando true ou false. Veja como ficaria para o atributo CPF:
public class CPFAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var cpf = Convert.ToString(value);
if (String.IsNullOrEmpty(cpf))
return true;
return CPF.Validate(cpf); // Aqui chamada para sua função de validar CPF
}
}
Feito isso, basta decorar a propriedade específica da classe:
public class Pessoa
{
[Required]
public string Nome { get; set; }
[CPF]
public string CPF { get; set; }
}
O único detalhe é que essas validações ocorrem apenas no servidor, e não no cliente, como é o padrão (pelo menos no MVC3) da maioria das validações já presentes no framework. Então você vai precisar verificar o ModelState.IsValid no controller.
Esse código foi testado no ASP.NET MVC 3, então não sei se funciona em versões anteriores.


TPodcast