ASP .NET - MVC Music Store - Validação com Data Annotations


Temos um grande problema com os nossos formulários Create e Edit: eles não estão fazendo nenhuma validação.

Podemos fazer coisas como deixar os campos obrigatórios em branco ou digitar letras no campo preço de forma que os erros somente serão vistos no banco de dados.

Mas isso não uma boa prática e para melhorar esse cenário podemos adicionar a validação à nossa aplicação, acrescentando Data Annotations(anotações de dados) em nossas classes do modelo.

O recursos Data Annotations permite descrever as regras que queremos aplicar ao nosso modelo de propriedades, e a ASP.NET MVC vai cuidar de aplicá-las e exibir mensagens apropriadas para nossos usuários conforme a definição das regras.

Os atributos Data Annotation foram introduzido no .NET 3.5 como uma forma de adicionar a validação para as classes usadas por aplicações ASP.NET. Desde aquela época, o RIA Services começou a usar anotações de dados e eles agora fazem parte do Silverlight também. No EF 4.0 o Code-First permite que você construa um EDM usando código (C#/VB .NET) e também permite realizar a validação com atributos Data Annotations.

Para este recurso devemos usar o namespace System.ComponentModel.DataAnnotations pois é ele que provê atributos de classes (usados para definir metadados) e métodos que podemos usar em nossas classes para alterar as convenções padrão e definir um comportamento personalizado que pode ser usado em vários cenários.

Adicionando validação ao formulário de Álbuns

Vamos usar os seguintes atributos Data Annotations:

Abra a classe Album e adicione as seguinte instruções Data Annotations no início do arquivo:


Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations
Imports System.Web.Mvc

A seguir atualize as propriedades para adicionar atributos de validação e exibição conforme mostrado abaixo:

Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations
Imports System.Web.Mvc

Public Class Album

  
 <ScaffoldColumn(False)> _
    Public Property AlbumId As Integer

 
  <DisplayName("Genero")> _
    Public Property GeneroId As Integer

  
 <DisplayName("Artista")> _
    Public Property ArtistaId As Integer

  
 <Required(ErrorMessage:="O título do Álbum é obrigatório")> _
    <StringLength(160)> _

    Public Property Titulo As String

  
 <Required(ErrorMessage:="O preço é obrigatório")> _
    <Range(0.01, 100.0, ErrorMessage:="O preço deve estar entre 0.01 e 100.00")> _

    Public Property Preco As Decimal

 
  <DisplayName("Album Art URL")> _
    <StringLength(1024)> _

    Public Property AlbumArtUrl As String

    Public  Overridable Property Genero As Genero
    Public  Overridable Property Artista As Artista

End Class

Vamos também alterar as propriedades Genero e Artista para Overridable(virtual) para permitir ao Entity Framework a usar o lazy-load quando necessários.

Depois de adicionar estes atributos ao nosso model Album, nossas telas para criar e editar estarão imediatamente realizando a validação dos campos usando os nomes para exibição conforme escolhemos.

Rode a aplicação e navegue apra /StoreManager/Create e a seguir vamos quebrar as regras de validação definidas: deixe o campo titulo em branco e informe um valor de 200,00 para o preço.

Ao clicar no botão Create veremos o formulário exibir mensagens de erro de validação mostrando quais campos não se ajustam às regras de validação definidas:

Testando a validação do lado do cliente

A validação do lado do servidor é muito importante do ponto de vista de aplicação, pois os usuários podem contornar a validação no cliente. No entanto, os formulários de páginas web que só implementam a validação do lado do servidor apresentam três problemas significativos.

Felizmente, os templates scaffold da ASP.NET MVC 3 possuem a validação do lado do cliente embutida, sem necessidade de trabalho adicional algum.

Digitando uma única letra no campo Título satisfaz os requisitos de validação, de forma que a mensagem de validação é removido imediatamente.

No próximo tutorial vamos usa o implementar a autenticação e a associação(membership) em nossa aplicação: ASP .NET - MVC Music Store - Implementando a autenticação e associação

Referências:


José Carlos Macoratti