Pesquisar

Acompanhe

http://twitter.com/dfcdaniel Feed

Posts recentes

Comentários recentes

ASP.NET MVC 2 DataAnnotations - Parte 1

Você quer validar os Models da sua aplicação com o menor esforço possível respeitando os bons princípios de OOP? Se a resposta for sim utilize DataAnnotations!

No ASP.NET MVC 2 RC você pode utilizar os recursos de DataAnnotations para validar os Models da sua aplicação no Server e com 3 linhas de código a mais você consegue a mesma validação no Client. Vamos ver como isso funciona.

Para validar os Models da sua aplicação você precisa apenas "decorar" as propriedades com o(s) atributo(s) apropriado(s), todos os atributos estão no namespace System.ComponentModel.DataAnnotations , veja abaixo uma lista com os atributos mais utilizados.

Required – Especifica que o valor da propriedade é necessário.

StringLength - Especifica o tamanho máximo de caracteres permitidos.

RegularExpression - Especifica que o valor da propriedade deve corresponder à expressão regular.

Range - Especifica um intervalo numérico para o valor da propriedade.

Em uma aplicação comum esses são os atributos que você com certeza ira utilizar, você ainda pode estender a funcionalidade de um atributo para atender as suas necessidades ou criar um a partir da classe base ValidationAttribute, mais isso é assunto para outro post.

Para montar esse exemplo utilizei o ASP.NET MVC 2 RC com Visual Studio 2008, vamos iniciar pelo Model da aplicação veja o código abaixo.

public class Cliente
{
    [StringLength(50, ErrorMessage = "Digite um nome com até 50 caracteres.")]
    [Required(ErrorMessage = "O campo nome é obrigatório.")]
    public string Nome { get; set; }

    [Required(ErrorMessage = "O campo email é obrigatório.")]
    [RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "Email inválido.")]
    public string Email { get; set; }

    [Required(ErrorMessage = "O campo idade é obrigatório.")]
    [Range(0, 100, ErrorMessage = "Entre com um valor de 0 a 120.")]
    public int Idade { get; set; }

    [Required(ErrorMessage = "O campo endereço é obrigatório.")]
    public string Endereco { get; set; }
}

Com o Model pronto vamos ver se as validações estão realmente funcionando, crie um Controller conforme código abaixo.

public class ClienteController : Controller
{
    public ActionResult Index()
    {
        return RedirectToAction("Create");
    }

    public ActionResult Create()
    {
        return View(new Cliente());
    }

    [HttpPost]
    public ActionResult Create(Cliente cliente)
    {
        if (ModelState.IsValid)
        {
            //Persiste o model
            return Content("Model valido!");
        }
        return View();
    }
}

Note que a action Create recebe como parâmetro o nosso Model e verifica se o ModelState é valido.

Por fim vamos montar a view Create , para isso clique com o direito dentro da action Create e selecione a opção Add View , veja as configurações na imagem abaixo.

Configuração da View

Imagem 1 - Configurações da View

Agora você pode executar a aplicação e digitar http://localhost:xxxx/cliente , veja o resultado esperado na imagem abaixo.

Resultado esperado

Imagem 2 - Resultado esperado

Agora para finalizar só esta faltando as validações no Client (validações JavaScript), para adicionar esse recurso você precisa de mais 3 linhas de código na View Create adicione os arquivos JavaScript MicrosoftAjax.js e MicrosoftMvcValidation.js , para habilitar as validações utilize o helper Html.EnableClientValidation(), Veja o trecho de código alterado na imagem abaixo.

Habilitando validações no client

Imagem 3 - Habilitando validações no client

Agora teste novamente e note que você possui validações no client também, simplesmente sensacional! No próximo post vamos criar um validador customizado.

Código fonte em C# ou VB.NET

Daniel Fonseca Castro

Currently rated 4.0 by 3 people

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories: ASP.NET MVC 2

Related posts

Comments

Vinicius Quaiato br

Tuesday, January 26, 2010 5:45 PM

Fala Daniel! Ficou bem bacana esse post, explicativo, claro e direto ao ponto!

Recurso muito bom esse =]

Muito bacana! Parabéns!

Daniel Makiyama br

Wednesday, February 10, 2010 10:01 PM

Usei e funcionou para mim! Perfeito! Tks Castro!

Add comment


 

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]