Temple Coding

  • Home
  • Open Source
  • Sobre
    • Livros que estou lendo
    • Sobre
RSS

Validação com Asp.Net MVC2

Posted on 07/02/2010 by vintem
No CommentsLeave a comment

OK, eu mal terminei meu primeiro projeto real com o Asp.Net MVC e o Asp.Net MVC já está quase na segunda versão que deve sair em março, junto com o Visual Studio 2010 e o .Net 4.

De qualquer forma, já é hora de começar a se atualizar e estava eu lendo e testando o Asp.Net MVC 2 e uma das coisas que eu mais gostei é a forma de validação usando o namespace System.ComponentModel.DataAnnotations que agora já faz parte do .Net Framework. Mas melhor ainda é ver como a validação por javascript ficou simples, e muito importante, seguindo os principios do DRY.

Eu estou testando o MVC2 no Visual Studio 2010 beta2, mas não é obrigatório fazer dessa forma, é possível utilizar o Visual Studio 2008 também. A partir do momento que o MVC2 está instalado é possível criar um projeto do tipo Asp.Net MVC2 Web Application.

Criado o projeto a primeira coisa que vamos fazer é criar uma classe de model:

?View Code CSHARP
1
2
3
4
5
6
7
public class Cliente
{
    public int IdCliente { get; set; }
    public string Nome { get; set; }
    public int? Idade{ get; set; }
    public string Email { get; set; }
}

Depois disso precisamos definir o que será validado. Vamos definir isso direto na classe do model. Para isso primeiro temos que dizer que nossa classe está usando o namespace System.ComponentModel.DataAnnotations.

?View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
12
public class Cliente
{
    public int IdCliente { get; set; }
    [Required(ErrorMessage = "Preencha o nome")]
    public string Nome { get; set; }
    [Required(ErrorMessage = "Preencha a idade")]
    [Range(0, 150, ErrorMessage="Idade inválida")]
    public int? Idade { get; set; }
    [Required(ErrorMessage = "Preencha o email")]
    [RegularExpression(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}$", ErrorMessage = "Email inválido")]
    public string Email { get; set; }
}

Como vimos, basta decorar os métodos com os atributos de validação e colocar as mensagens de erro. É possível também, ao invés de colocar as mensagens de erro diretamente, colocar uma referência para um Resource e, portanto, utilizar a internacionalização.

Agora vamos criar uma classe de controller com o método de Create.

?View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class ClienteController : Controller
{
    public ActionResult Create()
    {
        return View(new Cliente());
    }
 
    [HttpPost]
    public ActionResult Create(Cliente novoCliente)
    {
        if (ModelState.IsValid)
        {
            // Salvar no Banco de Dados
            return Redirect("/");
        }
 
        return View(novoCliente);
    }
}

Dois métodos create, um para exibir o formulário vazio e outro para processar a criação do nosso cliente. Veja que agora temos um atributo HttpPost para decorar os métodos que só serão acessados via post, não é mais feito usando AcceptVerbs(HttpVerbs.Post).

De resto, esse método funciona como no MVC1, ao submeter o formulário o MVC faz o binding dos campos e cria o objeto Cliente e também executa a validação. Se não for encontrado nenhum erro, podemos salvar no banco de dados, caso tenha algum erro o formulário é apresentado novamente com os campos já preenchidos, por isso passamos o objeto criado de volta ao formulário.

Vamos criar a View como fazemos normalmente no MVC. Botão direito dentro do método Create -> Add View, selecionar Create a strongly-typed view, a nossa classe Cliente e no View Content: a opção Create:

Deve ser gerado uma View como a abaixo:

Agora, ao acessar a página de criação de cliente e tentar criar um novo cliente sem preencher nada veremos o seguinte:

Fácil não? Agora só falta fazer a validação por javascript. Existe duas formas de fazer isso, usando a biblioteca de ajax da Microsoft ou usando jQuery. No fim, não muda muito, só as referências que são adicionadas  na página. Vou fazer aqui usando o jQuery. Vamos alterar a view de criação de cliente para que fique assim:

Pronto. Isso é tudo que precisa ser feito para que a validação funcione com javascript, adicionar as referências às bibliotecas do jQuery e à biblioteca MicrosoftMvcJQueryValidation.js e por fim, habilitar a validação no cliente chamando o método Html.EnableClientValidation.

É possível também criar uma validação customizada, mas eu vou mostrar isso num próximo post.

Existem outras mudanças na forma de validação do MVC2 como, por exemplo, agora é possível utilizar o Enterprise Library Validation Block para fazer a validação. Além disso, o modelo de validação também mudou, mas isso também vale um outro post.

Tweet
government,politics news,politics news,politics
Categories: ASPNET MVC | Tags: asp.net mvc
Notice: This work is licensed under a BY-NC-SA. Permalink: Validação com Asp.Net MVC2
A história sem fim
Saindo da média
  • Categorias

    • .NET (1)
    • ASP.NET (1)
    • ASPNET MVC (15)
    • Blog (1)
    • Controle de Versões (2)
    • Desenvolvimento (10)
    • Java (1)
    • JavaScript (2)
    • jQuery (1)
    • Leitura (5)
    • Ruby (2)
    • Ruby on Rails (1)
    • Sem categoria (23)
    • Testes (4)
  • Language

    • English
    • Português
  • Tags

    agilidade asp.net asp.net mvc asp.net vc automapper blog code templates controle de versoes css dataaccess dependency injection ebook encoding eventos excecoes firebug git globalizacao hibernate iis ironruby jasypt java javascript jquery json leitura less mvccontrib qcon rails ruby selenium simpledata snippet stored procedures structuremap tdc templates testes testes integrados visualstudio vraptor windsor
© Temple Coding. Proudly Powered by WordPress | Nest Theme by YChong