Share via


Aktualisieren, Löschen und Erstellen von Daten mit Modellbindung und Webformularen

von Tom FitzMacken

In dieser Tutorialreihe werden grundlegende Aspekte der Verwendung der Modellbindung mit einem ASP.NET Web Forms-Projekt veranschaulicht. Die Modellbindung macht die Dateninteraktion einfacher als den Umgang mit Datenquellenobjekten (z. B. ObjectDataSource oder SqlDataSource). Diese Reihe beginnt mit einführungsmaterial und geht in späteren Tutorials zu komplexeren Konzepten über.

In diesem Tutorial erfahren Sie, wie Sie Daten mit Modellbindung erstellen, aktualisieren und löschen. Sie legen die folgenden Eigenschaften fest:

  • Deletemethod
  • InsertMethod
  • Updatemethod

Diese Eigenschaften erhalten den Namen der Methode, die den entsprechenden Vorgang verarbeitet. Innerhalb dieser Methode stellen Sie die Logik für die Interaktion mit den Daten bereit.

Dieses Tutorial baut auf dem Projekt auf, das im ersten Teil der Reihe erstellt wurde.

Sie können das gesamte Projekt in C# oder VB herunterladen . Der herunterladbare Code funktioniert entweder mit Visual Studio 2012 oder Visual Studio 2013. Es verwendet die Visual Studio 2012-Vorlage, die sich geringfügig von der in diesem Tutorial gezeigten vorlage Visual Studio 2013 unterscheidet.

Funktion des erstellten Programms

In diesem Tutorial gehen Sie wie folgt vor:

  1. Hinzufügen dynamischer Datenvorlagen
  2. Aktivieren des Aktualisierens und Löschens von Daten über Modellbindungsmethoden
  3. Anwenden von Datenüberprüfungsregeln: Aktivieren des Erstellens eines neuen Datensatzes in der Datenbank

Hinzufügen dynamischer Datenvorlagen

Sie verwenden dynamische Datenvorlagen, um die beste Benutzererfahrung zu bieten und die Wiederholung von Code zu minimieren. Sie können auf einfache Weise vordefinierte dynamische Datenvorlagen in Ihre vorhandene Website integrieren, indem Sie ein NuGet-Paket installieren.

Installieren Sie unter NuGet-Pakete verwalten den DynamicDataTemplatesCS.

Vorlagen für dynamische Daten

Beachten Sie, dass Ihr Projekt jetzt einen Ordner namens DynamicData enthält. In diesem Ordner finden Sie die Vorlagen, die automatisch auf dynamische Steuerelemente in Ihren Webformularen angewendet werden.

Dynamischer Datenordner

Aktivieren des Aktualisierens und Löschens

Das Aktivieren von Benutzern zum Aktualisieren und Löschen von Datensätzen in der Datenbank ähnelt dem Vorgang zum Abrufen von Daten. In den Eigenschaften UpdateMethod und DeleteMethod geben Sie die Namen der Methoden an, die diese Vorgänge ausführen. Mit einem GridView-Steuerelement können Sie auch die automatische Generierung von Schaltflächen zum Bearbeiten und Löschen angeben. Der folgende hervorgehobene Code zeigt die Ergänzungen zum GridView-Code.

<asp:GridView runat="server" ID="studentsGrid"
    ItemType="ContosoUniversityModelBinding.Models.Student" DataKeyNames="StudentID"
    SelectMethod="studentsGrid_GetData"
    UpdateMethod="studentsGrid_UpdateItem" DeleteMethod="studentsGrid_DeleteItem"
    AutoGenerateEditButton="true" AutoGenerateDeleteButton="true"  
    AutoGenerateColumns="false">

Fügen Sie in der CodeBehind-Datei eine using-Anweisung für System.Data.Entity.Infrastructure hinzu.

using System.Data.Entity.Infrastructure;

Fügen Sie dann die folgenden Update- und Löschmethoden hinzu.

public void studentsGrid_UpdateItem(int studentID)
{
    using (SchoolContext db = new SchoolContext())
    {
        Student item = null;
        item = db.Students.Find(studentID);
        if (item == null)
        {
            ModelState.AddModelError("", 
              String.Format("Item with id {0} was not found", studentID));
            return;
        }
              
        TryUpdateModel(item);
        if (ModelState.IsValid)
        {
            db.SaveChanges();
        }
    }
}

public void studentsGrid_DeleteItem(int studentID)
{
    using (SchoolContext db = new SchoolContext())
    {
        var item = new Student { StudentID = studentID };
        db.Entry(item).State = EntityState.Deleted;
        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            ModelState.AddModelError("", 
              String.Format("Item with id {0} no longer exists in the database.", studentID));
        }
    }
}

Die TryUpdateModel-Methode wendet die übereinstimmenden datengebundenen Werte aus dem Webformular auf das Datenelement an. Das Datenelement wird basierend auf dem Wert des id-Parameters abgerufen.

Erzwingen von Validierungsanforderungen

Die Validierungsattribute, die Sie auf die Eigenschaften FirstName, LastName und Year in der Student-Klasse angewendet haben, werden beim Aktualisieren der Daten automatisch erzwungen. Die DynamicField-Steuerelemente fügen Client- und Servervalidatoren basierend auf den Validierungsattributen hinzu. Die Eigenschaften FirstName und LastName sind beide erforderlich. FirstName darf maximal 20 Zeichen lang sein, und LastName darf 40 Zeichen nicht überschreiten. Year muss ein gültiger Wert für die AcademicYear-Enumeration sein.

Wenn der Benutzer gegen eine der Validierungsanforderungen verstößt, wird das Update nicht fortgesetzt. Um die Fehlermeldung anzuzeigen, fügen Sie ein ValidationSummary-Steuerelement über gridView hinzu. Legen Sie zum Anzeigen der Validierungsfehler aus der Modellbindung die ShowModelStateErrors-Eigenschaft auf true fest.

<asp:ValidationSummary ShowModelStateErrors="true" runat="server" />

Führen Sie die Webanwendung aus, und aktualisieren und löschen Sie alle Datensätze.

Aktualisieren von Daten

Beachten Sie, dass im Bearbeitungsmodus der Wert für die Year-Eigenschaft automatisch als Dropdownliste gerendert wird. Die Year-Eigenschaft ist ein Enumerationswert, und die dynamische Datenvorlage für einen Enumerationswert gibt eine Dropdownliste für die Bearbeitung an. Sie können diese Vorlage finden, indem Sie die Datei Enumeration_Edit.ascx im Ordner DynamicData/FieldTemplates öffnen.

Wenn Sie gültige Werte angeben, wird das Update erfolgreich abgeschlossen. Wenn Sie gegen eine der Validierungsanforderungen verstoßen, wird das Update nicht fortgesetzt, und über dem Raster wird eine Fehlermeldung angezeigt.

Fehlermeldung

Hinzufügen neuer Datensätze

Das GridView-Steuerelement enthält nicht die InsertMethod-Eigenschaft und kann daher nicht zum Hinzufügen eines neuen Datensatzes mit Modellbindung verwendet werden. Sie finden die InsertMethod-Eigenschaft in den Steuerelementen FormView, DetailsView oder ListView . In diesem Tutorial verwenden Sie ein FormView-Steuerelement, um einen neuen Datensatz hinzuzufügen.

Fügen Sie zunächst einen Link zu der neuen Seite hinzu, die Sie zum Hinzufügen eines neuen Datensatzes erstellen. Fügen Sie oberhalb von ValidationSummary Folgendes hinzu:

<asp:HyperLink NavigateUrl="~/AddStudent" Text="Add New Student" runat="server" />

Der neue Link wird oben im Inhalt der Seite Schüler angezeigt.

Neuer Link

Fügen Sie dann ein neues Webformular mithilfe einer master Seite hinzu, und nennen Sie es AddStudent. Wählen Sie Site.Master als master Seite aus.

Sie rendern die Felder zum Hinzufügen eines neuen Kursteilnehmers mithilfe eines DynamicEntity-Steuerelements . Das DynamicEntity-Steuerelement rendert die bearbeitbaren Eigenschaften in der klasse, die in der ItemType-Eigenschaft angegeben ist. Die StudentID-Eigenschaft wurde mit dem [ScaffoldColumn(false)] -Attribut gekennzeichnet, sodass sie nicht gerendert wird. Fügen Sie im Platzhalter MainContent der Seite AddStudent den folgenden Code hinzu.

<asp:ValidationSummary runat="server" ShowModelStateErrors="true" />
<asp:FormView runat="server" ID="addStudentForm"
    ItemType="ContosoUniversityModelBinding.Models.Student" 
    InsertMethod="addStudentForm_InsertItem" DefaultMode="Insert"
    RenderOuterTable="false" OnItemInserted="addStudentForm_ItemInserted">
    <InsertItemTemplate>
        <fieldset>
            <ol>
                <asp:DynamicEntity runat="server" Mode="Insert" />
            </ol>
            <asp:Button runat="server" Text="Insert" CommandName="Insert" />
            <asp:Button runat="server" Text="Cancel" CausesValidation="false" OnClick="cancelButton_Click" />
        </fieldset>
    </InsertItemTemplate>
</asp:FormView>

Fügen Sie in der CodeBehind-Datei (AddStudent.aspx.cs) eine using-Anweisung für den ContosoUniversityModelBinding.Models-Namespace hinzu.

using ContosoUniversityModelBinding.Models;

Fügen Sie dann die folgenden Methoden hinzu, um anzugeben, wie ein neuer Datensatz und ein Ereignishandler für die Abbrechen-Schaltfläche eingefügt werden sollen.

public void addStudentForm_InsertItem()
{
    var item = new Student();
            
    TryUpdateModel(item);
    if (ModelState.IsValid)
    {
        using (SchoolContext db = new SchoolContext())
        {
            db.Students.Add(item);
            db.SaveChanges();
        }
    }
}

protected void cancelButton_Click(object sender, EventArgs e)
{
    Response.Redirect("~/Students");
}

protected void addStudentForm_ItemInserted(object sender, FormViewInsertedEventArgs e)
{
    Response.Redirect("~/Students");
}

Speichern Sie alle Änderungen.

Führen Sie die Webanwendung aus, und erstellen Sie einen neuen Kursteilnehmer.

Neuen Kursteilnehmer hinzufügen

Klicken Sie auf Einfügen , und stellen Sie fest, dass der neue Kursteilnehmer erstellt wurde.

Anzeigen eines neuen Kursteilnehmers

Zusammenfassung

In diesem Tutorial haben Sie das Aktualisieren, Löschen und Erstellen von Daten aktiviert. Sie haben sichergestellt, dass Validierungsregeln bei der Interaktion mit den Daten angewendet werden.

Im nächsten Tutorial dieser Reihe aktivieren Sie das Sortieren, Paging und Filtern von Daten.