Partilhar via


Introdução ao Entity Framework 4.0 Database First e ASP.NET 4 Web Forms - Parte 8

por Tom Dykstra

O aplicativo Web de exemplo da Contoso University demonstra como criar aplicativos Web Forms ASP.NET usando o Entity Framework 4.0 e o Visual Studio 2010. Para obter informações sobre a série de tutoriais, consulte o primeiro tutorial da série

Usando a funcionalidade de dados dinâmicos para formatar e validar dados

No tutorial anterior, você implementou procedimentos armazenados. Este tutorial mostrará como a funcionalidade de dados dinâmicos pode fornecer os seguintes benefícios:

  • Os campos são formatados automaticamente para exibição com base em seu tipo de dados.
  • Os campos são validados automaticamente com base em seu tipo de dados.
  • Você pode adicionar metadados ao modelo de dados para personalizar a formatação e o comportamento de validação. Ao fazer isso, você pode adicionar as regras de formatação e validação em apenas um lugar, e elas são aplicadas automaticamente em todos os lugares em que você acessa os campos usando controles de dados dinâmicos.

Para ver como isso funciona, você alterará os controles usados para exibir e editar campos na página Students.aspx existente e adicionará metadados de formatação e validação aos campos de nome e data do Student tipo de entidade.

Imagem 01

Usando os controles DynamicField e DynamicControl

Abra a página Students.aspx e, no controle, StudentsGridView substitua os elementos Nome e Data TemplateField de Inscrição pela seguinte marcação:

<asp:TemplateField HeaderText="Name" SortExpression="LastName">
                <EditItemTemplate>
                    <asp:DynamicControl ID="LastNameTextBox" runat="server" DataField="LastName" Mode="Edit" />
                    <asp:DynamicControl ID="FirstNameTextBox" runat="server" DataField="FirstMidName" Mode="Edit" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:DynamicControl ID="LastNameLabel" runat="server" DataField="LastName" Mode="ReadOnly" />,
                    <asp:DynamicControl ID="FirstNameLabel" runat="server" DataField="FirstMidName" Mode="ReadOnly" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:DynamicField DataField="EnrollmentDate" HeaderText="Enrollment Date" SortExpression="EnrollmentDate" />

Essa marcação usa DynamicControl controles no lugar de e Label controles no campo de modelo de nome do TextBox aluno e usa um DynamicField controle para a data de matrícula. Nenhuma cadeia de caracteres de formato é especificada.

Adicione um ValidationSummary controle após o StudentsGridView controle.

<asp:ValidationSummary ID="StudentsValidationSummary" runat="server" ShowSummary="true"
        DisplayMode="BulletList" Style="color: Red" />

SearchGridView No controle, substitua a marcação para as colunas Nome e Data de Registro como você fez no StudentsGridView controle, exceto omitir o EditItemTemplate elemento. O Columns elemento do SearchGridView controle agora contém a seguinte marcação:

<asp:TemplateField HeaderText="Name" SortExpression="LastName">
                <ItemTemplate>
                    <asp:DynamicControl ID="LastNameLabel" runat="server" DataField="LastName" Mode="ReadOnly" />,
                    <asp:DynamicControl ID="FirstNameLabel" runat="server" DataField="FirstMidName" Mode="ReadOnly" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:DynamicField DataField="EnrollmentDate" HeaderText="Enrollment Date" SortExpression="EnrollmentDate" />

Abra Students.aspx.cs e adicione a seguinte using instrução:

using ContosoUniversity.DAL;

Adicione um manipulador para o evento da Init página:

protected void Page_Init(object sender, EventArgs e)
{
    StudentsGridView.EnableDynamicData(typeof(Student));
    SearchGridView.EnableDynamicData(typeof(Student));
}

Esse código especifica que os Dados Dinâmicos fornecerão formatação e validação nesses controles associados a dados para campos da Student entidade. Se você receber uma mensagem de erro como o exemplo a seguir ao executar a página, isso normalmente significa que você esqueceu de chamar o EnableDynamicData método em Page_Init:

Could not determine a MetaTable. A MetaTable could not be determined for the data source 'StudentsEntityDataSource' and one could not be inferred from the request URL.

Execute a página.

Imagem 03

Na coluna Data de Inscrição, a hora é exibida junto com a data porque o tipo de propriedade é DateTime. Você vai consertar isso mais tarde.

Por enquanto, observe que os Dados Dinâmicos fornecem automaticamente a validação básica de dados. Por exemplo, clique em Editar, desmarque o campo de data, clique em Atualizar e você verá que Dados Dinâmicos automaticamente torna esse campo obrigatório porque o valor não permite valor nulo no modelo de dados. A página exibe um asterisco após o campo e uma mensagem de erro no ValidationSummary controle:

Imagem 05

Você pode omitir o ValidationSummary controle, pois também pode manter o ponteiro do mouse sobre o asterisco para ver a mensagem de erro:

Image06

Os Dados Dinâmicos também validarão que os dados inseridos no campo Data de Inscrição são uma data válida:

Imagem 04

Como você pode ver, esta é uma mensagem de erro genérica. Na próxima seção, você verá como personalizar mensagens, bem como regras de validação e formatação.

Adicionando metadados ao modelo de dados

Normalmente, você deseja personalizar a funcionalidade fornecida pelos Dados Dinâmicos. Por exemplo, você pode alterar a forma como os dados são exibidos e o conteúdo das mensagens de erro. Normalmente, você também personaliza as regras de validação de dados para fornecer mais funcionalidade do que os Dados Dinâmicos fornecem automaticamente com base nos tipos de dados. Para fazer isso, você cria classes parciais que correspondem aos tipos de entidade.

No Gerenciador de Soluções, clique com o botão direito do mouse no projeto ContosoUniversity , selecione Adicionar Referência e adicione uma referência ao System.ComponentModel.DataAnnotations.

Image11

Na pasta DAL, crie um novo arquivo de classe, nomeie-o Student.cs e substitua o código do modelo nele pelo código a seguir.

using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace ContosoUniversity.DAL
{
    [MetadataType(typeof(StudentMetadata))]
    public partial class Student
    {
    }

    public class StudentMetadata
    {
        [DisplayFormat(DataFormatString="{0:d}", ApplyFormatInEditMode=true)]
        public DateTime EnrollmentDate { get; set; }

        [StringLength(25, ErrorMessage = "First name must be 25 characters or less in length.")]
        [Required(ErrorMessage="First name is required.")]
        public String FirstMidName { get; set; }

        [StringLength(25, ErrorMessage = "Last name must be 25 characters or less in length.")]
        [Required(ErrorMessage = "Last name is required.")]
        public String LastName { get; set; }
    }
}

Esse código cria uma classe parcial para a Student entidade. O MetadataType atributo aplicado a essa classe parcial identifica a classe que você está usando para especificar metadados. A classe de metadados pode ter qualquer nome, mas usar o nome da entidade mais "Metadados" é uma prática comum.

Os atributos aplicados às propriedades na classe de metadados especificam formatação, validação, regras e mensagens de erro. Os atributos mostrados aqui terão os seguintes resultados:

  • EnrollmentDate será exibido como uma data (sem hora).
  • Ambos os campos de nome devem ter 25 caracteres ou menos e uma mensagem de erro personalizada é fornecida.
  • Ambos os campos de nome são obrigatórios e uma mensagem de erro personalizada é fornecida.

Execute a página Students.aspx novamente e você verá que as datas agora são exibidas sem horários:

Imagem 08

Edite uma linha e tente limpar os valores nos campos de nome. Os asteriscos que indicam erros de campo aparecem assim que você sai de um campo, antes de clicar em Atualizar. Quando você clica em Atualizar, a página exibe o texto da mensagem de erro especificado.

Image10

Tente inserir nomes com mais de 25 caracteres, clique em Atualizar e a página exibirá o texto da mensagem de erro especificado.

Imagem 09

Agora que você configurou essas regras de formatação e validação nos metadados do modelo de dados, as regras serão aplicadas automaticamente em todas as páginas que exibem ou permitem alterações nesses campos, desde que você use DynamicControl ou DynamicField controle. Isso reduz a quantidade de código redundante que você precisa escrever, o que facilita a programação e o teste, além de garantir que a formatação e a validação dos dados sejam consistentes em todo o aplicativo.

Mais informações

Isso conclui esta série de tutoriais sobre Introdução ao Entity Framework. Para obter mais recursos para ajudá-lo a aprender a usar o Entity Framework, continue com o primeiro tutorial da próxima série de tutoriais do Entity Framework ou visite os seguintes sites: