Partager via


Prise en main d’Entity Framework 4.0 Database First et ASP.NET 4 Web Forms - Partie 8

par Tom Dykstra

L’exemple d’application web Contoso University montre comment créer ASP.NET applications Web Forms à l’aide d’Entity Framework 4.0 et de Visual Studio 2010. Pour plus d’informations sur la série de tutoriels, consultez le premier didacticiel de la série

Utilisation des fonctionnalités de données dynamiques pour mettre en forme et valider des données

Dans le tutoriel précédent, vous avez implémenté des procédures stockées. Ce tutoriel vous montre comment les fonctionnalités de données dynamiques peuvent offrir les avantages suivants :

  • Les champs sont automatiquement mis en forme pour l’affichage en fonction de leur type de données.
  • Les champs sont automatiquement validés en fonction de leur type de données.
  • Vous pouvez ajouter des métadonnées au modèle de données pour personnaliser le comportement de mise en forme et de validation. Lorsque vous effectuez cette opération, vous pouvez ajouter les règles de mise en forme et de validation à un seul endroit, et elles sont automatiquement appliquées partout où vous accédez aux champs à l’aide de contrôles de données dynamiques.

Pour voir comment cela fonctionne, vous allez modifier les contrôles que vous utilisez pour afficher et modifier des champs dans la page Students.aspx existante, et vous allez ajouter des métadonnées de mise en forme et de validation aux champs nom et date du type d’entitéStudent.

Image01

Utilisation des contrôles DynamicField et DynamicControl

Ouvrez la page Students.aspx et, dans le StudentsGridView contrôle, remplacez les éléments Name et Enrollment Date TemplateField par le balisage suivant :

<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" />

Ce balisage utilise des DynamicControl contrôles à la place et des contrôles dans le champ de TextBox Label modèle de nom d’étudiant, et utilise un DynamicField contrôle pour la date d’inscription. Aucune chaîne de format n’est spécifiée.

Ajoutez un ValidationSummary contrôle après le StudentsGridView contrôle.

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

Dans le SearchGridView contrôle, remplacez le balisage des colonnes Name et Enrollment Date comme vous l’avez fait dans le StudentsGridView contrôle, sauf omettre l’élément EditItemTemplate . L’élément Columns du SearchGridView contrôle contient désormais le balisage suivant :

<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" />

Ouvrez Students.aspx.cs et ajoutez l’instruction suivante using :

using ContosoUniversity.DAL;

Ajoutez un gestionnaire pour l’événement de Init la page :

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

Ce code spécifie que les données dynamiques fournissent une mise en forme et une validation dans ces contrôles liés aux données pour les champs de l’entité Student . Si vous recevez un message d’erreur comme dans l’exemple suivant lorsque vous exécutez la page, cela signifie généralement que vous avez oublié d’appeler la EnableDynamicData méthode dans 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.

Exécutez la page.

Image03

Dans la colonne Date d’inscription, l’heure s’affiche avec la date, car le type de propriété est DateTime. Vous allez résoudre cela plus tard.

Pour l’instant, notez que Les données dynamiques fournissent automatiquement la validation des données de base. Par exemple, cliquez sur Modifier, effacez le champ date, cliquez sur Mettre à jour et vous voyez que les données dynamiques rendent automatiquement ce champ obligatoire, car la valeur n’est pas nullable dans le modèle de données. La page affiche un astérisque après le champ et un message d’erreur dans le ValidationSummary contrôle :

Image05

Vous pouvez omettre le ValidationSummary contrôle, car vous pouvez également contenir le pointeur de la souris sur l’astérisque pour afficher le message d’erreur :

Image06

Les données dynamiques vérifient également que les données entrées dans le champ Date d’inscription sont une date valide :

Image04

Comme vous pouvez le voir, il s’agit d’un message d’erreur générique. Dans la section suivante, vous allez voir comment personnaliser les messages, ainsi que les règles de validation et de mise en forme.

Ajout de métadonnées au modèle de données

En règle générale, vous souhaitez personnaliser les fonctionnalités fournies par Dynamic Data. Par exemple, vous pouvez modifier la façon dont les données sont affichées et le contenu des messages d’erreur. En règle générale, vous personnalisez également les règles de validation des données pour fournir plus de fonctionnalités que ce que les données dynamiques fournissent automatiquement en fonction des types de données. Pour ce faire, vous créez des classes partielles qui correspondent aux types d’entités.

Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet ContosoUniversity, sélectionnez Ajouter une référence et ajoutez une référence à System.ComponentModel.DataAnnotations.

image11

Dans le dossier DAL , créez un fichier de classe, nommez-le Student.cs et remplacez le code de modèle dans celui-ci par le code suivant.

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; }
    }
}

Ce code crée une classe partielle pour l’entité Student . L’attribut MetadataType appliqué à cette classe partielle identifie la classe que vous utilisez pour spécifier des métadonnées. La classe de métadonnées peut avoir n’importe quel nom, mais l’utilisation du nom d’entité plus « Metadata » est une pratique courante.

Les attributs appliqués aux propriétés de la classe de métadonnées spécifient la mise en forme, la validation, les règles et les messages d’erreur. Les attributs présentés ici ont les résultats suivants :

  • EnrollmentDate s’affiche sous forme de date (sans heure).
  • Les deux champs de nom doivent être de 25 caractères ou moins, et un message d’erreur personnalisé est fourni.
  • Les deux champs de nom sont obligatoires et un message d’erreur personnalisé est fourni.

Réexécutez la page Students.aspx, et vous voyez que les dates sont désormais affichées sans heures :

Image08

Modifiez une ligne et essayez d’effacer les valeurs dans les champs de nom. Les astérisques indiquant que les erreurs de champ s’affichent dès que vous quittez un champ, avant de cliquer sur Mettre à jour. Lorsque vous cliquez sur Mettre à jour, la page affiche le texte du message d’erreur que vous avez spécifié.

image10

Essayez d’entrer des noms de plus de 25 caractères, cliquez sur Mettre à jour et la page affiche le texte du message d’erreur que vous avez spécifié.

Image09

Maintenant que vous avez configuré ces règles de mise en forme et de validation dans les métadonnées du modèle de données, les règles sont automatiquement appliquées sur chaque page qui affiche ou autorise les modifications apportées à ces champs, tant que vous utilisez DynamicControl ou DynamicField contrôlez. Cela réduit la quantité de code redondant que vous devez écrire, ce qui facilite la programmation et le test, et garantit que la mise en forme et la validation des données sont cohérentes dans toute une application.

Informations supplémentaires

Cela conclut cette série de tutoriels sur la prise en main d’Entity Framework. Pour plus de ressources pour vous aider à apprendre à utiliser Entity Framework, passez au premier didacticiel de la série de didacticiels Entity Framework suivante ou visitez les sites suivants :