Compartilhar via


Como: Personalizar a validação de campo dados no modelo de dados

Dados dinâmicos do ASP.NET permite que você personalizar e estende a validação de dados para o modelo de dados.Este tópico mostra como você pode adicionar validação de campo de dados no modelo de dados das seguintes maneiras:

  • Personalizando validação para campos de dados individuais, aplicando dados dinâmicos System.ComponentModel.DataAnnotations atributos para os campos. Esses atributos definem padrões comuns de validação, sistema autônomo verificação de intervalo e sistema autônomo campos obrigatórios.Essa abordagem permite que você usar verificações de validação predefinidas com muito pouco código.Você deve usar essa abordagem quando você deseja aplicar validação adicional para o que já é fornecido por dados dinâmicos e o padrão de System.ComponentModel.DataAnnotations atributos são suficientes para suas necessidades.

    Observação:

    Você também pode criar validação personalizada atributos.Isso permite expandir a validação Isso é fornecido pela System.ComponentModel.DataAnnotations atributos. É útil se os atributos disponível não atenderem os requisitos de validação para um campo de dados específico.Para obter mais informações, consulte Como: Personalizar a validação de campo de dados no modelo de dados usando atributos personalizados.

  • Personalizando a validação para um campo de dados individuais, substituindo o método de classe parcial processa alterações para esse campo de dados (ou ao manipular um evento correspondente).Essa abordagem permite que você adicionar validação e lógica de negócios de um campo individual.

  • Personalizando a validação de qualquer campo de dados, substituindo o OnValidate método (ou lidar com o Validate evento). Esse método é chamado quando qualquer campo de dados na tabela está sendo processado.Essa abordagem é mais geral de adicionar validação para um campo individual.Ele é útil quando a mesma lógica de validação pode ser aplicada a mais de um campo de dados.Ele também permite que você realize verificações de validação que envolvem vários campos.

Todas as exceções de validação são lançadas no modelo de dados são detectadas pelo DynamicValidator controle. Se uma página contiver um DynamicValidator controle, o erro pode ser exibido na página.

  • Para todas as verificações de validação que você adicionar ao modelo de dados, você deve criar uma classe parcial que estende a classe de tabela no modelo de dados.Em seguida, você pode adicionar verificações de validação para a classe parcial.

Executar um exemplo desse recurso online.

Criando uma classe parcial para validação

Antes de poder personalizar validação na camada do modelo de dados, você deve implementar uma classe parcial que estende o modelo de dados.Isso permite que você faça o seguinte:

  • personalizar validação adicionando informações de metadados por meio de atributos.

  • Personalizar validação Implementando métodos de classe parcial que permitem que você criar sua própria lógica de validação.

Para criar a classe parcial para validação

  1. In O gerenciador de soluções, clicar com o botão direito do mouse na posta App_Code pasta e, em seguida, clique em Adicionar novo item.

  2. Em Visual Studio installed templates, clique em Class.

    No Nome, digite o nome da tabela de dados que você deseja adicionar validação para.

    O nome da classe deve corresponder ao nome de classe de entidade que representa a tabela.Por exemplo, se você quiser adicionar validação para a tabela Customers, deve nomear o arquivo cliente.cs em Visual C# ou cliente.vb em Visual Basice o nome da classe Customer.

  3. Adicionar o Partial palavra-chave em Visual Basic ou o partial palavra-chave em Visual C# a definição de classe para torná-lo em uma classe parcial.

    O exemplo a seguir mostra a declaração de classe atualizada.

    public partial class Customer {
    
    }
    
    Partial Public Class Customer
    
    End Class
    
  4. Se você estiver criando a classe em Visual C#, exclua o construtor padrão.

  5. Adicionar referências para o System.Web.DynamicData e System.ComponentModel.DataAnnotations espaços para nome usando o Imports palavra-chave em Visual Basic ou o using palavra-chave em Visual C#, conforme mostrado no exemplo a seguir:

    using System.Web.DynamicData;
    using System.ComponentModel.DataAnnotations;
    
    Imports System.Web.DynamicData
    Imports System.ComponentModel.DataAnnotations
    
  6. No mesmo arquivo, crie uma classe segundo que atuará sistema autônomo a classe de metadados associados.Você pode usar qualquer nome para a classe que é um nome de classe válido e que já não está sendo usado.

    O exemplo a seguir mostra uma declaração de classe de metadados.

    [C#]

    public class CustomerMetadata
    {
    
    }
    
    Public Class CustomerMetadata 
    
    End Class
    

    A classe de metadados associados fornece um objeto que você pode aplicar atributos de validação.

  7. Aplicar o MetadataTypeAttribute o atributo à definição de classe parcial. O atributo do parâmetro, use o nome da classe metadados associados que você criou na etapa anterior.

    O exemplo a seguir mostra a definição de classe parcial com atribuída adicionado.

    [MetadataType(typeof(CustomerMetadata))]
    public partial class Customer {
    
    }
    
    <MetadataType(GetType(CustomerMetadata))> _
    Partial Public Class Customer
    
    End Class
    

Personalizando a validação usando atributos

Esta seção mostra como personalizar validação usando regras de validação padrão fornecidas pelo Dynamic dados System.ComponentModel.DataAnnotations atributos.

Para validar um campo de dados específicos usando atributos de validação

  1. Na classe metadados, criar uma propriedade ou campo cujo nome corresponde ao campo de dados para validar

  2. Aplicar um dos atributos no System.ComponentModel.DataAnnotations espaço para nome da propriedade.

    O exemplo a seguir mostra como aplicar o System.ComponentModel.DataAnnotations.RequiredAttribute o atributo para o campo de dados de título na classe metadados associados. Se um usuário inserir uma seqüência vazia, a IsValid método lança uma exceção de validação e gera uma mensagem de erro.

    Observação:

    Aplicando o RequiredAttribute atributo, você exigir que os usuários Insira um valor, mesmo se isso não é necessária para o banco de dados.

    public class CustomerMetadata
    {
      [Required()]
      public object Title;
    }
    
    Public Class CustomerMetadata 
      <Required()> _
      Public Title As Object
    End Class
    

Personalizando a validação para um campo de dados individuais usando um método de classe parcial

Esta seção mostra como personalizar validação por substituir um método de classe parcial que processa as alterações que fez a um campo de dados individuais.Este tipo de validação permite que você crie suas próprias regras para executar a validação em vez de depender de interno de verificações de validação de dados dinâmicos que foram implementados no System.ComponentModel.DataAnnotations atributos.

Para validar um campo de dados específicos usando um método de classe parcial

  1. Substitua o método de classe parcial que processa as alterações que foram feitas para o campo de dados.

  2. Adicione a lógica de validação personalizada.

    O exemplo a seguir mostra como substituir o OnTitleChanging método em um parcial Customer classe. O método é chamado quando o campo de título da tabela de dados cliente está sendo alterado.O código do exemplo verifica que o novo título digitado pelo usuário começa com um letra maiúscula.Se os dados não passar na validação, o método lançará uma exceção.O valor a ser validado é passado para o método sistema autônomo o único parâmetro.O parâmetro é digitado para corresponder ao tipo de dados dos dados para validar.

    Observação:

    Qualquer exceções de validação que são lançada no modelo de dados são detectadas por o Controle DynamicValidatorSe uma página contiver um DynamicValidator controle, o erro pode ser exibido na página.

    public partial class Customer 
    {
      partial void OnTitleChanging(string value) 
      {
        if (!Char.IsUpper(value[0])) {
          throw new ValidationException(
           "Title must start with an uppercase letter.");}
        }
    }
    
    Public Partial Class Customer
      Private Sub OnTitleChanging(ByVal value As String)
        If Not [Char].IsUpper(value(0)) Then
          Throw New ValidationException( _
            "Title must start with an uppercase letter.")
        End If
      End Sub
    End Class
    

Personalizando a validação para todos os campos de dados usando um método de classe parcial

Esta seção mostra como personalizar a validação, substituindo o método de classe parcial que processa as alterações que fez a qualquer campo de dados de uma tabela.Este tipo de validação permite que você crie suas próprias regras para executar a validação em vez de depender de interno de verificações de validação de dados dinâmicos que foram implementados no System.ComponentModel.DataAnnotations atributos. Ele é útil quando a mesma lógica de validação pode ser aplicada a mais de um campo de dados.Ele também permite que você realize verificações de validação que envolvem vários campos.

Para validar a qualquer campo de dados usando um método de classe parcial

  1. Substituir o OnValidate método de classe parcial é invocado quando forem feitas alterações em qualquer campo de dados na tabela.

  2. Adicione a lógica de validação personalizada.

    O exemplo a seguir mostra como substituir o OnValidate método. Este código de exemplo verifica o nome e sobrenome inserido pelo usuário começar com um maiúsculas letra.Se os dados não passar na validação, o método lançará uma exceção.

    Observação:

    Qualquer exceções de validação que são lançada no modelo de dados detectada pela Controle DynamicValidatorSe uma página contiver um DynamicValidator controle, o erro pode ser exibido na página.

    partial void OnValidate(
        System.Data.Linq.ChangeAction action)
        {
            if (!Char.IsUpper(this._LastName[0]) || 
                !Char.IsUpper(this._FirstName[0]))
              throw new  ValidationException(
                 "Name must start with an uppercase letter.");
            }
    
    Private Sub OnValidate(ByVal action As _  
           System.Data.Linq.ChangeAction)
        If Not [Char].IsUpper(Me._LastName(0)) OrElse _
                Not [Char].IsUpper(Me._FirstName(0)) Then
            Throw New ValidationException( _
                "Name must start with an uppercase letter.")
        End If
    End Sub
    

Exemplo

O exemplo mostra como usar o RequiredAttribute atributo para validar os dados de título da tabela cliente. Ele usa o OnValidate método de classe parcial para certificar-se de que os valores inseridos pelo usuário para os campos de dados título, FirstName e LastName começam com uma letra maiúscula. Ele também usa o OnOderQtyChanging método de classe parcial para verificar se o valor inserido pelo usuário para o campo de dados OrderQty da tabela SalesOrderDetails é maior do que um mínimo especificado.

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.DynamicData
Imports System.ComponentModel.DataAnnotations

<MetadataType(GetType(CustomerMetadata))> _
Partial Public Class Customer


    Private Sub OnValidate(ByVal action As System.Data.Linq.ChangeAction)
        If Not Char.IsUpper(Me._LastName(0)) _
        OrElse Not Char.IsUpper(Me._FirstName(0)) _
        OrElse Not Char.IsUpper(Me._Title(0)) Then
            Throw New ValidationException( _
               "Data value must start with an uppercase letter.")
        End If
    End Sub


End Class

Public Class CustomerMetadata
    <Required()> _
    Public Title As Object

End Class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.DynamicData;
using System.ComponentModel.DataAnnotations;

[MetadataType(typeof(CustomerMetadata))]
public partial class Customer
{


    partial void OnValidate(System.Data.Linq.ChangeAction action)
    {
        if (!char.IsUpper(this._LastName[0]) ||
            !char.IsUpper(this._FirstName[0])  ||
            !char.IsUpper(this._Title[0]))
            throw new ValidationException(
               "Data value must start with an uppercase letter.");
    }


}

public class CustomerMetadata
{
    [Required()]
    public object Title;

}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.DynamicData
Imports System.ComponentModel.DataAnnotations

Partial Public Class SalesOrderDetail
    Private Sub OnOrderQtyChanging(ByVal value As Short)
        If value < 100 Then
            Throw New ValidationException( _
               "Quantity is less than the allowed minimum of 100.")
        End If
    End Sub
End Class

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.DynamicData;
using System.ComponentModel.DataAnnotations;

public partial class SalesOrderDetail
{
    partial void OnOrderQtyChanging(short value)
    {
        if (value < 100)
        {
            throw new ValidationException(
                "Quantity is less than the allowed minimum of 100.");
        }
    }
}

<%@ Page Language="VB" 
AutoEventWireup="true" CodeFile="CustomValidation.aspx.vb" 
Inherits="CustomValidation" %>


<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" >
    <title></title>
    <link href="~/Site.css" rel="stylesheet" type="text/css" />
</head>
<body>
     <h2>Example: <%=Title%></h2>

     <!-- Enable dynamic behavior. The GridView must be 
     registered with the manager. See code-behind file. -->
    <asp:DynamicDataManager ID="DynamicDataManager1" 
        AutoLoadForeignKeys="true" />


    <form id="form1" >

        <!-- Capture validation exceptions -->
        <asp:DynamicValidator ID="ValidatorID" ControlToValidate="GridView1" 
             /> 
        <asp:DynamicValidator ID="DynamicValidator1" ControlToValidate="GridView2" 
             /> 
        <table>
            <tr>
                <td align="left" valign="top" style="font-weight:bold">
                    Customize Validation Using the Table OnValidate 
                </td>
                <td>
                    <asp:GridView ID="GridView1" 
                         
                        DataSourceID="GridDataSource" 
                        AutoGenerateColumns="false"  
                        AutoGenerateEditButton="true"
                        AllowPaging="true" 
                        PageSize="5"
                        AllowSorting="true">
                        <Columns>
                            <asp:DynamicField DataField="Title" />
                            <asp:DynamicField DataField="FirstName" />
                            <asp:DynamicField DataField="LastName" />
                        </Columns>
                        <EmptyDataTemplate>
                            There are currently no items in this table.
                        </EmptyDataTemplate>
                    </asp:GridView>
                </td>
            </tr>
            <tr>
                <td align="left" valign="top" style="font-weight:bold">
                    Customize Validation Using OnOrderQtyChanging
                </td>
                <td>
                    <asp:GridView ID="GridView2" 
                         
                        DataSourceID="GridDataSource2" 
                        AutoGenerateColumns="false"  
                        AutoGenerateEditButton="true"
                        AllowPaging="true" 
                        PageSize="5"
                        AllowSorting="true">
                        <Columns>
                            <asp:DynamicField DataField="OrderQty" />
                        </Columns>
                        <EmptyDataTemplate>
                            There are currently no items in this table.
                        </EmptyDataTemplate>
                    </asp:GridView>
                </td>
            </tr>
        </table>

    </form>

    <!-- Connect to the database -->
    <asp:LinqDataSource ID="GridDataSource"   
         TableName="Customers" EnableUpdate="true"
        ContextTypeName="AdventureWorksLTDataContext">

    </asp:LinqDataSource>

     <!-- Connect to the database -->
    <asp:LinqDataSource ID="GridDataSource2"   
         TableName="SalesOrderDetails" EnableUpdate="true"
        ContextTypeName="AdventureWorksLTDataContext">

    </asp:LinqDataSource>
</body>
</html>
<%@ Page Language="C#" 
AutoEventWireup="true" CodeFile="CustomValidation.aspx.cs" 
Inherits="CustomValidation" %>


<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" >
    <title></title>
    <link href="~/Site.css" rel="stylesheet" type="text/css" />
</head>
<body>
     <h2>Example: <%=Title%></h2>

     <!-- Enable dynamic behavior. The GridView must be 
     registered with the manager. See code-behind file. -->
    <asp:DynamicDataManager ID="DynamicDataManager1" 
        AutoLoadForeignKeys="true" />


    <form id="form1" >

        <!-- Capture validation exceptions -->
        <asp:DynamicValidator ID="ValidatorID" ControlToValidate="GridView1" 
             /> 
        <asp:DynamicValidator ID="DynamicValidator1" ControlToValidate="GridView2" 
             /> 
        <table>
            <tr>
                <td align="left" valign="top" style="font-weight:bold">
                    Customize Validation Using the Table OnValidate 
                </td>
                <td>
                    <asp:GridView ID="GridView1" 
                         
                        DataSourceID="GridDataSource" 
                        AutoGenerateColumns="false"  
                        AutoGenerateEditButton="true"
                        AllowPaging="true" 
                        PageSize="5"
                        AllowSorting="true">
                        <Columns>
                            <asp:DynamicField DataField="Title" />
                            <asp:DynamicField DataField="FirstName" />
                            <asp:DynamicField DataField="LastName" />
                        </Columns>
                        <EmptyDataTemplate>
                            There are currently no items in this table.
                        </EmptyDataTemplate>
                    </asp:GridView>
                </td>
            </tr>
            <tr>
                <td align="left" valign="top" style="font-weight:bold">
                    Customize Validation Using OnOrderQtyChanging
                </td>
                <td>
                    <asp:GridView ID="GridView2" 
                         
                        DataSourceID="GridDataSource2" 
                        AutoGenerateColumns="false"  
                        AutoGenerateEditButton="true"
                        AllowPaging="true" 
                        PageSize="5"
                        AllowSorting="true">
                        <Columns>
                            <asp:DynamicField DataField="OrderQty" />
                        </Columns>
                        <EmptyDataTemplate>
                            There are currently no items in this table.
                        </EmptyDataTemplate>
                    </asp:GridView>
                </td>
            </tr>
        </table>

    </form>

    <!-- Connect to the database -->
    <asp:LinqDataSource ID="GridDataSource"   
         TableName="Customers" EnableUpdate="true"
        ContextTypeName="AdventureWorksLTDataContext">

    </asp:LinqDataSource>

     <!-- Connect to the database -->
    <asp:LinqDataSource ID="GridDataSource2"   
         TableName="SalesOrderDetails" EnableUpdate="true"
        ContextTypeName="AdventureWorksLTDataContext">

    </asp:LinqDataSource>
</body>
</html>
Imports System
Imports System.Collections
Imports System.Configuration
Imports System.Web.DynamicData

Partial Public Class CustomValidation
    Inherits System.Web.UI.Page
    Protected _table1 As MetaTable, _table2 As MetaTable

    Protected Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
        ' Register data controls with the data manager.
        DynamicDataManager1.RegisterControl(GridView1)
        DynamicDataManager1.RegisterControl(GridView2)
    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
        ' Get the table entities.
        _table1 = GridDataSource.GetTable()
        _table2 = GridDataSource2.GetTable()

        ' Assign title dynamically.
        Title = String.Concat("Customize Validation of the ", _
                              _table1.Name, " and ", _table2.Name, " Tables")

    End Sub
End Class
using System;
using System.Collections;
using System.Configuration;
using System.Web.DynamicData;

public partial class CustomValidation : System.Web.UI.Page
{
    protected MetaTable _table1, _table2;

    protected void Page_Init(object sender, EventArgs e)
    {
        // Register data controls with the data manager.
        DynamicDataManager1.RegisterControl(GridView1);
        DynamicDataManager1.RegisterControl(GridView2);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        // Get the table entities.
        _table1 = GridDataSource.GetTable();
        _table2 = GridDataSource2.GetTable();

        // Assign title dynamically.
        Title = string.Concat("Customize Validation of the ",
            _table1.Name, " and ",  _table2.Name, " Tables");

    }
}

Compilando o código

Para compilar o código de exemplo, você precisa do seguinte:

  • Microsoft Visual Studio 2008 serviço empacotar 1 ou Visual Web Developer 2008 Express Edition serviço empacotar 1.

  • O banco de dados de exemplo AdventureWorksLT.Para obter informações sobre como baixar e instalar o banco de dados de exemplo do SQL servidor, consulte Exemplos de produtos do Microsoft SQL servidor: Banco de dados no site da CodePlex.Certifique-se de instalar a versão correta do banco de dados de exemplo para a versão do SQL servidor que você está executando (Microsoft SQL Server 2005 ou Microsoft SQL Server 2008).

Um site da Web dinâmico de dados.Isso permite que você criar um contexto de dados para o banco de dados e criar a classe que contém o campo de dados para personalizar e os métodos para substituir.Para obter mais informações, consulte Walkthrough: Creating a New Dynamic Data Web Site Using Scaffolding.

Consulte também

Conceitos

Visão geral do ASP.NET dinâmico dados campo modelos

Visão geral de modelo Dados Dinâmicos ASP.NET

Visão geral de dados dinâmicos do ASP.NET

Referência

RequiredAttribute

DynamicValidator

Parcial classes e métodos (Guia de programação C#)

Date

History

Motivo

Julho de 2008

Tópico adicional.

Alteração de recurso do SP1.