Share via


Erste Schritte mit Entity Framework 4.0 Database First und ASP.NET 4 Web Forms – Teil 8

von Tom Dykstra

Die Beispielwebanwendung der Contoso University veranschaulicht das Erstellen ASP.NET Web Forms Anwendungen mit Entity Framework 4.0 und Visual Studio 2010. Informationen zur Tutorialreihe finden Sie im ersten Tutorial der Reihe.

Verwenden dynamischer Datenfunktionalität zum Formatieren und Überprüfen von Daten

Im vorherigen Tutorial haben Sie gespeicherte Prozeduren implementiert. In diesem Tutorial erfahren Sie, wie Dynamic Data-Funktionen die folgenden Vorteile bieten können:

  • Felder werden automatisch für die Anzeige basierend auf ihrem Datentyp formatiert.
  • Felder werden basierend auf ihrem Datentyp automatisch überprüft.
  • Sie können dem Datenmodell Metadaten hinzufügen, um das Formatierungs- und Validierungsverhalten anzupassen. Wenn Sie dies tun, können Sie die Formatierungs- und Validierungsregeln an nur einer Stelle hinzufügen, und sie werden automatisch überall angewendet, wo Sie mithilfe von Dynamic Data-Steuerelementen auf die Felder zugreifen.

Um zu sehen, wie dies funktioniert, ändern Sie die Steuerelemente, die Sie zum Anzeigen und Bearbeiten von Feldern auf der vorhandenen Seite Students.aspx verwenden, und Fügen Sie den Namen- und Datumsfeldern des Student Entitätstyps Formatierungs- und Validierungsmetadaten hinzu.

Image01

Verwenden von DynamicField- und DynamicControl-Steuerelementen

Öffnen Sie die Seite Students.aspx , und ersetzen Sie im Steuerelement die StudentsGridView Elemente Name und RegistrierungsdatumTemplateField durch das folgende Markup:

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

Dieses Markup verwendet DynamicControl Steuerelemente anstelle von TextBox und Label im Feld Schülernamenvorlage und verwendet ein DynamicField Steuerelement für das Registrierungsdatum. Es werden keine Formatzeichenfolgen angegeben.

Fügen Sie nach dem StudentsGridView Steuerelement ein Steuerelement hinzuValidationSummary.

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

Ersetzen Sie im SearchGridView Steuerelement das Markup für die Spalten Name und Registrierungsdatum , wie Sie es StudentsGridView im Steuerelement getan haben, außer das EditItemTemplate Element wegzulassen. Das Columns -Element des -Steuerelements SearchGridView enthält nun das folgende Markup:

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

Öffnen Sie Students.aspx.cs , und fügen Sie die folgende using Anweisung hinzu:

using ContosoUniversity.DAL;

Fügen Sie einen Handler für das Ereignis der Seite Init hinzu:

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

Dieser Code gibt an, dass Dynamic Data Formatierung und Validierung in diesen datengebundenen Steuerelementen für Felder der Student Entität bereitstellt. Wenn Sie beim Ausführen der Seite eine Fehlermeldung wie das folgende Beispiel erhalten, bedeutet dies in der Regel, dass Sie vergessen haben, die EnableDynamicData Methode in Page_Initaufzurufen:

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.

Führen Sie die Seite aus.

Image03

In der Spalte Registrierungsdatum wird die Uhrzeit zusammen mit dem Datum angezeigt, da der Eigenschaftstyp ist DateTime. Sie werden dies später beheben.

Beachten Sie vorerst, dass Dynamic Data automatisch grundlegende Datenvalidierung bereitstellt. Klicken Sie beispielsweise auf Bearbeiten, löschen Sie das Datumsfeld, klicken Sie auf Aktualisieren, und Sie sehen, dass dynamische Daten dies automatisch zu einem erforderlichen Feld machen, da der Wert im Datenmodell nicht nullable ist. Die Seite zeigt ein Sternchen nach dem Feld und eine Fehlermeldung im ValidationSummary Steuerelement an:

Image05

Sie könnten das ValidationSummary Steuerelement weglassen, da Sie den Mauszeiger auch über das Sternchen halten können, um die Fehlermeldung anzuzeigen:

Abbildung06

Dynamic Data überprüft auch, ob die im Feld Registrierungsdatum eingegebenen Daten ein gültiges Datum sind:

Image04

Wie Sie sehen, handelt es sich hierbei um eine generische Fehlermeldung. Im nächsten Abschnitt erfahren Sie, wie Sie Nachrichten sowie Validierungs- und Formatierungsregeln anpassen.

Hinzufügen von Metadaten zum Datenmodell

In der Regel möchten Sie die von Dynamic Data bereitgestellte Funktionalität anpassen. Beispielsweise können Sie ändern, wie Daten angezeigt werden und wie Fehlermeldungen enthalten sind. Sie passen in der Regel auch Datenüberprüfungsregeln an, um mehr Funktionen bereitzustellen, als dynamic Data basierend auf Datentypen automatisch bereitstellt. Dazu erstellen Sie partielle Klassen, die Entitätstypen entsprechen.

Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt ContosoUniversity, wählen Sie Verweis hinzufügen aus, und fügen Sie einen Verweis auf hinzuSystem.ComponentModel.DataAnnotations.

Image11

Erstellen Sie im Dal-Ordner eine neue Klassendatei, nennen Sie sie Student.cs, und ersetzen Sie den Darin enthaltenen Vorlagencode durch den folgenden Code.

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

Dieser Code erstellt eine partielle Klasse für die Student Entität. Das MetadataType Attribut, das auf diese partielle Klasse angewendet wird, identifiziert die Klasse, die Sie zum Angeben von Metadaten verwenden. Die Metadatenklasse kann einen beliebigen Namen haben, aber die Verwendung des Entitätsnamens plus "Metadaten" ist eine gängige Vorgehensweise.

Die Attribute, die auf Eigenschaften in der Metadatenklasse angewendet werden, geben Formatierung, Validierung, Regeln und Fehlermeldungen an. Die hier gezeigten Attribute haben die folgenden Ergebnisse:

  • EnrollmentDate wird als Datum (ohne Uhrzeit) angezeigt.
  • Beide Namensfelder müssen mindestens 25 Zeichen lang sein, und es wird eine benutzerdefinierte Fehlermeldung bereitgestellt.
  • Beide Namensfelder sind erforderlich, und eine benutzerdefinierte Fehlermeldung wird bereitgestellt.

Führen Sie die Seite Students.aspx erneut aus, und Sie sehen, dass die Datumsangaben jetzt ohne Zeiten angezeigt werden:

Image08

Bearbeiten Sie eine Zeile, und versuchen Sie, die Werte in den Namensfeldern zu löschen. Die Sternchen, die Feldfehler angeben, werden angezeigt, sobald Sie ein Feld verlassen, bevor Sie auf Aktualisieren klicken. Wenn Sie auf Aktualisieren klicken, wird auf der Seite der von Ihnen angegebene Fehlermeldungstext angezeigt.

Image10

Versuchen Sie, Namen einzugeben, die länger als 25 Zeichen sind, klicken Sie auf Aktualisieren, und auf der Seite wird der von Ihnen angegebene Fehlermeldungstext angezeigt.

Image09

Nachdem Sie nun diese Formatierungs- und Validierungsregeln in den Datenmodellmetadaten eingerichtet haben, werden die Regeln automatisch auf jede Seite angewendet, auf der diese Felder angezeigt oder Änderungen an diesen Feldern angezeigt oder zulässt, solange Sie steuerelemente oder DynamicField verwendenDynamicControl. Dies reduziert die Menge an redundantem Code, den Sie schreiben müssen, was die Programmierung und Das Testen vereinfacht, und es wird sichergestellt, dass Datenformatierung und Validierung in einer gesamten Anwendung konsistent sind.

Weitere Informationen

Damit wird diese Reihe von Tutorials zum Erste Schritte mit Entity Framework abgeschlossen. Weitere Ressourcen, die Ihnen helfen, die Verwendung von Entity Framework zu erfahren, fahren Sie mit dem ersten Tutorial in der nächsten Tutorialreihe für Entity Framework fort, oder besuchen Sie die folgenden Websites: