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.
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_Init
aufzurufen:
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.
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:
Sie könnten das ValidationSummary
Steuerelement weglassen, da Sie den Mauszeiger auch über das Sternchen halten können, um die Fehlermeldung anzuzeigen:
Dynamic Data überprüft auch, ob die im Feld Registrierungsdatum eingegebenen Daten ein gültiges Datum sind:
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
.
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:
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.
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.
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:
- Der Entity Framework-Teamblog
- Entity Framework in der MSDN Library
- Entity Framework im MSDN Data Developer Center
- Übersicht über das EntityDataSource-Webserversteuerelement in der MSDN Library
- EntityDataSource-Steuerelement-API-Referenz in der MSDN Library
- Entity Framework-Foren auf MSDN
- Blog von Julie Lerman
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für