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
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.
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.
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
Se você estiver criando a classe em Visual C#, exclua o construtor padrão.
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
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.
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
Na classe metadados, criar uma propriedade ou campo cujo nome corresponde ao campo de dados para validar
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
Substitua o método de classe parcial que processa as alterações que foram feitas para o campo de dados.
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
Substituir o OnValidate método de classe parcial é invocado quando forem feitas alterações em qualquer campo de dados na tabela.
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
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. |