Partilhar via


Validação com os validadores de anotação de dados (VB)

pela Microsoft

Aproveite o Associador de Modelo de Anotação de Dados para executar a validação em um aplicativo MVC ASP.NET. Saiba como usar os diferentes tipos de atributos de validador e trabalhar com eles no Microsoft Entity Framework.

Neste tutorial, você aprenderá a usar os validadores de Anotação de Dados para executar a validação em um aplicativo ASP.NET MVC. A vantagem de usar os validadores de Anotação de Dados é que eles permitem que você execute a validação simplesmente adicionando um ou mais atributos , como o atributo Required ou StringLength, a uma propriedade de classe.

É importante entender que o Associador de Modelo de Anotações de Dados não é uma parte oficial da estrutura microsoft ASP.NET MVC. Embora o Associador de Modelo de Anotações de Dados tenha sido criado pela equipe do Microsoft ASP.NET MVC, a Microsoft não oferece suporte oficial ao produto para o Associador de Modelo de Anotações de Dados descrito e usado neste tutorial.

Usando o associador de modelo de anotação de dados

Para usar o Associador de Modelo de Anotações de Dados em um aplicativo MVC ASP.NET, primeiro você precisa adicionar uma referência ao assembly Microsoft.Web.Mvc.DataAnnotations.dll e ao assembly System.ComponentModel.DataAnnotations.dll. Selecione a opção de menu Projeto, Adicionar Referência. Em seguida, clique na guia Procurar e navegue até o local onde você baixou (e descompactou) o exemplo de Associador de Modelo de Anotações de Dados (consulte a Figura 1).

Imagem da caixa de diálogo Adicionar referência

Figura 1: adicionando uma referência ao Associador de Modelo de Anotações de Dados (clique para exibir a imagem em tamanho real)

Selecione o assembly Microsoft.Web.Mvc.DataAnnotations.dll e o assembly System.ComponentModel.DataAnnotations.dll e clique no botão OK .

Não é possível usar o assembly System.ComponentModel.DataAnnotations.dll incluído no .NET Framework Service Pack 1 com o Associador de Modelo de Anotações de Dados. Você deve usar a versão do assembly System.ComponentModel.DataAnnotations.dll incluído no download do Exemplo do Associador de Modelo de Anotações de Dados.

Por fim, você precisa registrar o DataAnnotations Model Binder no arquivo Global.asax. Adicione a seguinte linha de código ao manipulador de eventos Application_Start() para que o método Application_Start() tenha esta aparência:

Protected Sub Application_Start()
    RegisterRoutes(RouteTable.Routes)
    ModelBinders.Binders.DefaultBinder = New Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder()
End Sub

Essa linha de código registra DataAnnotationsModelBinder como o associador de modelo padrão para todo o aplicativo MVC ASP.NET.

Usando os atributos do validador de anotação de dados

Ao usar o Associador de Modelo de Anotações de Dados, você usa atributos de validador para executar a validação. O namespace System.ComponentModel.DataAnnotations inclui os seguintes atributos de validador:

  • Intervalo – permite que você valide se o valor de uma propriedade está entre um intervalo de valores especificado.
  • RegularExpression – permite validar se o valor de uma propriedade corresponde a um padrão de expressão regular especificado.
  • Obrigatório – permite que você marque uma propriedade conforme necessário.
  • StringLength – permite que você especifique um comprimento máximo para uma propriedade de cadeia de caracteres.
  • Validação – a classe base para todos os atributos de validador.

Observação

Se suas necessidades de validação não forem atendidas por nenhum dos validadores padrão, você sempre terá a opção de criar um atributo de validador personalizado herdando um novo atributo validador do atributo de Validação base.

A classe Product na Listagem 1 ilustra como usar esses atributos de validador. As propriedades Name, Description e UnitPrice são marcadas como obrigatórias. A propriedade Name deve ter um comprimento de cadeia de caracteres menor que 10 caracteres. Por fim, a propriedade UnitPrice deve corresponder a um padrão de expressão regular que representa um valor de moeda.

Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations

Public Class Product

    Private _id As Integer
    Private _name As String
    Private _description As String
    Private _unitPrice As Decimal

    Public Property Id() As Integer
        Get
            Return _id
        End Get
        Set(ByVal value As Integer)
            _id = value
        End Set
    End Property

     _
    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

     _
    Public Property Description() As String
        Get
            Return _description
        End Get
        Set(ByVal value As String)
            _description = value
        End Set
    End Property

     _
    Public Property UnitPrice() As Decimal
        Get
            Return _unitPrice
        End Get
        Set(ByVal value As Decimal)
            _unitPrice = value
        End Set
    End Property

End Class

Listagem 1: Models\Product.vb

A classe Product ilustra como usar um atributo adicional: o atributo DisplayName. O atributo DisplayName permite modificar o nome da propriedade quando a propriedade é exibida em uma mensagem de erro. Em vez de exibir a mensagem de erro "O campo UnitPrice é necessário", você pode exibir a mensagem de erro "O campo Preço é necessário".

Observação

Se você quiser personalizar completamente a mensagem de erro exibida por um validador, poderá atribuir uma mensagem de erro personalizada à propriedade ErrorMessage do validador desta forma: <Required(ErrorMessage:="This field needs a value!")>

Você pode usar a classe Product na Listagem 1 com a ação criar() controlador na Listagem 2. Essa ação do controlador exibe novamente a exibição Criar quando o estado do modelo contém erros.

Public Class ProductController
    Inherits System.Web.Mvc.Controller

    '
    ' GET: /Product/Create

    Function Create() As ActionResult
        Return View()
    End Function

    '
    ' POST: /Product/Create

     _
    Function Create( ByVal productToCreate As Product) As ActionResult

        If Not ModelState.IsValid Then
            Return View()
        End If

        Return RedirectToAction("Index")

    End Function

End Class

Listagem 2: Controllers\ProductController.vb

Por fim, você pode criar o modo de exibição na Listagem 3 clicando com o botão direito do mouse na ação Criar() e selecionando a opção de menu Adicionar Exibição. Crie uma exibição fortemente tipada com a classe Product como a classe de modelo. Selecione Criar na lista suspensa exibir conteúdo (consulte a Figura 2).

Imagem da caixa de diálogo Adicionar exibição

Figura 2: Adicionando o modo de exibição Criar

<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of MvcApplication1.Product)" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Create</h2>

    <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>

    <% Using Html.BeginForm()%>

        <fieldset>
            <legend>Fields</legend>
            <p>
                <label for="Name">Name:</label>
                <%= Html.TextBox("Name") %>
                <%= Html.ValidationMessage("Name", "*") %>
            </p>
            <p>
                <label for="Description">Description:</label>
                <%= Html.TextBox("Description") %>
                <%= Html.ValidationMessage("Description", "*") %>
            </p>
            <p>
                <label for="UnitPrice">UnitPrice:</label>
                <%= Html.TextBox("UnitPrice") %>
                <%= Html.ValidationMessage("UnitPrice", "*") %>
            </p>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% End Using %>

    <div>
        <%=Html.ActionLink("Back to List", "Index") %>
    </div>

</asp:Content>

Listagem 3: Views\Product\Create.aspx

Observação

Remova o campo ID do formulário Criar gerado pela opção de menu Adicionar Modo de Exibição . Como o campo ID corresponde a uma coluna Identidade, você não deseja permitir que os usuários insiram um valor para esse campo.

Se você enviar o formulário para criar um Produto e não inserir valores para os campos necessários, as mensagens de erro de validação na Figura 3 serão exibidas.

Imagem de todas as mensagens de erro de validação

Figura 3: Campos obrigatórios ausentes

Se você inserir um valor de moeda inválido, a mensagem de erro na Figura 4 será exibida.

Imagem da mensagem de erro de moeda inválida

Figura 4: Valor de moeda inválido

Usando validadores de anotação de dados com o Entity Framework

Se você estiver usando o Microsoft Entity Framework para gerar suas classes de modelo de dados, não poderá aplicar os atributos do validador diretamente às suas classes. Como o Entity Framework Designer gera as classes de modelo, todas as alterações feitas nas classes de modelo serão substituídas na próxima vez que você fizer alterações no Designer.

Se você quiser usar os validadores com as classes geradas pelo Entity Framework, precisará criar classes de metadados. Você aplica os validadores à classe de metadados em vez de aplicar os validadores à classe real.

Por exemplo, imagine que você tenha criado uma classe Movie usando o Entity Framework (consulte a Figura 5). Imagine, além disso, que você deseja tornar as propriedades Título do Filme e Diretor necessárias. Nesse caso, você pode criar a classe parcial e a classe de metadados na Listagem 4.

Imagem da classe de filme

Figura 5: Classe de filme gerada pelo Entity Framework

Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations

 _
Partial Public Class Movie
End Class

Public Class MovieMetaData

    Private _title As Object
    Private _director As Object
    Private _dateReleased As Object

     _
    Public Property Title() As Object
        Get
            Return _title
        End Get
        Set(ByVal value As Object)
            _title = value
        End Set
    End Property

     _
    Public Property Director() As Object
        Get
            Return _director
        End Get
        Set(ByVal value As Object)
            _director = value
        End Set
    End Property

     _
    Public Property DateReleased() As Object
        Get
            Return _dateReleased
        End Get
        Set(ByVal value As Object)
            _dateReleased = value
        End Set
    End Property
End Class

Listagem 4: Models\Movie.vb

O arquivo na Listagem 4 contém duas classes chamadas Movie e MovieMetaData. A classe Movie é parcial. Corresponde à classe parcial gerada pelo Entity Framework contido no DataModel. arquivo Designer.vb.

Atualmente, o .NET Framework não dá suporte a propriedades parciais. Portanto, não há como aplicar os atributos do validador às propriedades da classe Movie definidas no DataModel. Designer.vb aplicando os atributos de validador às propriedades da classe Movie definidas no arquivo na Listagem 4.

Observe que a classe parcial Movie é decorada com um atributo MetadataType que aponta para a classe MovieMetaData. A classe MovieMetaData contém propriedades de proxy para as propriedades da classe Movie.

Os atributos do validador são aplicados às propriedades da classe MovieMetaData. As propriedades Title, Director e DateReleased estão marcadas como propriedades necessárias. A propriedade Director deve receber uma cadeia de caracteres que contenha menos de 5 caracteres. Por fim, o atributo DisplayName é aplicado à propriedade DateReleased para exibir uma mensagem de erro como "O campo Data liberada é necessário" em vez do erro "O campo DateReleased é necessário".

Observação

Observe que as propriedades de proxy na classe MovieMetaData não precisam representar os mesmos tipos que as propriedades correspondentes na classe Movie. Por exemplo, a propriedade Director é uma propriedade de cadeia de caracteres na classe Movie e uma propriedade de objeto na classe MovieMetaData.

A página na Figura 6 ilustra as mensagens de erro retornadas quando você insere valores inválidos para as propriedades movie.

Imagem da mensagem de erro de valores de filme inválidos

Figura 6: Usando validadores com o Entity Framework (clique para exibir a imagem em tamanho real)

Resumo

Neste tutorial, você aprendeu a aproveitar o Associador de Modelo de Anotação de Dados para executar a validação em um aplicativo ASP.NET MVC. Você aprendeu a usar os diferentes tipos de atributos de validador, como os atributos Required e StringLength. Você também aprendeu a usar esses atributos ao trabalhar com o Microsoft Entity Framework.