Freigeben über


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

von Tom FitzMacken

In dieser Lernprogrammreihe werden grundlegende Aspekte der Verwendung der Modellbindung mit einem ASP.NET Web Forms-Projekt veranschaulicht. Die Modellbindung macht die Dateninteraktion einfacher als das Behandeln von Datenquellenobjekten (z. B. ObjectDataSource oder SqlDataSource). Diese Reihe beginnt mit Einführungsmaterial und wechselt zu komplexeren Konzepten in späteren Lernprogrammen.

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

  • DeleteMethod
  • InsertMethode
  • UpdateMethod

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

Dieses Lernprogramm basiert auf dem Projekt, das im ersten Teil der Reihe erstellt wurde.

Sie können das vollständige Projekt in C# oder VB herunterladen . Der herunterladbare Code funktioniert entweder mit Visual Studio 2012 oder Visual Studio 2013. Sie verwendet die Visual Studio 2012-Vorlage, die sich geringfügig von der visual Studio 2013-Vorlage unterscheidet, die in diesem Lernprogramm gezeigt wird.

Was Sie erstellen werden

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

Um die beste Benutzererfahrung zu bieten und die Codewiezuholung zu minimieren, verwenden Sie dynamische Datenvorlagen. Sie können vordefinierte dynamische Datenvorlagen einfach in Ihre vorhandene Website integrieren, indem Sie ein NuGet-Paket installieren.

Installieren Sie aus der Option 'NuGet-Pakete verwalten' das DynamicDataTemplatesCS.

Dynamische Datenvorlagen

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

Dynamischer Datenordner

Aktualisieren und Löschen aktivieren

Das Aktualisieren und Löschen von Datensätzen in der Datenbank ist dem Vorgang zum Abrufen von Daten sehr ähnlich. 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 Bearbeitungs- und Löschschaltflächen angeben. Der folgende hervorgehobene Code zeigt die Ergänzungen des GridView-Codes.

<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 Code-Behind-Datei eine using-Anweisung für System.Data.Entity.Infrastructure hinzu.

using System.Data.Entity.Infrastructure;

Fügen Sie dann die folgenden Aktualisierungs- 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 Überprüfungsattribute, die Sie auf die Eigenschaften "FirstName", "LastName" und "Year" in der Kursteilnehmerklasse angewendet haben, werden beim Aktualisieren der Daten automatisch erzwungen. Die DynamicField-Steuerelemente fügen Client- und Servervalidatoren basierend auf den Überprüfungsattributen hinzu. Die Eigenschaften "FirstName" und "LastName" sind beide erforderlich. FirstName darf 20 Zeichen lang nicht überschreiten, und Nachname darf 40 Zeichen nicht überschreiten. Jahr muss ein gültiger Wert für die AcademicYear-Aufzählung sein.

Wenn der Benutzer gegen eine der Überprüfungsanforderungen verstößt, wird das Update nicht fortgesetzt. Um die Fehlermeldung anzuzeigen, fügen Sie oberhalb der GridView ein ValidationSummary-Steuerelement hinzu. Um die Überprüfungsfehler aus der Modellbindung anzuzeigen, legen Sie 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 der Wert für die Year-Eigenschaft automatisch im Bearbeitungsmodus als Dropdownliste gerendert wird. Die Year-Eigenschaft ist ein Enumerationswert, und die dynamische Datenvorlage für einen Enumerationswert gibt eine Dropdownliste zum Bearbeiten an. Sie finden diese Vorlage, indem Sie die Datei "Enumeration_Edit.ascx " im Ordner "DynamicData/FieldTemplates " öffnen.

Wenn Sie gültige Werte angeben, wird die Aktualisierung erfolgreich abgeschlossen. Wenn Sie gegen eine der Validierungsanforderungen verstoßen, wird das Update nicht fortgesetzt, und oberhalb des Rasters 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. Die InsertMethod-Eigenschaft finden Sie 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 zur neuen Seite hinzu, die Sie zum Hinzufügen eines neuen Datensatzes erstellen möchten. Fügen Sie über dem ValidationSummary Folgendes hinzu:

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

Der neue Link wird oben im Inhalt der Seite "Kursteilnehmer" angezeigt.

Neuer Link

Fügen Sie dann ein neues Webformular mithilfe einer Masterseite hinzu und benennen Sie es AddStudent. Wählen Sie "Site.Master" als Masterseite aus.

Sie rendern die Felder zum Hinzufügen eines neuen Kursteilnehmers mithilfe eines DynamicEntity-Steuerelements . Das DynamicEntity-Steuerelement rendert die bearbeitbaren Eigenschaften der in der ItemType-Eigenschaft angegebenen Klasse. Die StudentID-Eigenschaft wurde mit dem Attribut [ScaffoldColumn(false)] markiert, sodass sie nicht gerendert wird. Fügen Sie im MainContent-Platzhalter der AddStudent-Seite 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 Code-behind-Datei (AddStudent.aspx.cs) eine using-Anweisung für den Namespace ContosoUniversityModelBinding.Models hinzu.

using ContosoUniversityModelBinding.Models;

Fügen Sie dann die folgenden Methoden hinzu, um anzugeben, wie ein neuer Datensatz und ein Ereignishandler für die Schaltfläche "Abbrechen" 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 beachten Sie, dass der neue Kursteilnehmer erstellt wurde.

Neuen Kursteilnehmer anzeigen

Fazit

In diesem Lernprogramm haben Sie das Aktualisieren, Löschen und Erstellen von Daten aktiviert. Sie haben sichergestellt, dass Gültigkeitsprüfungsregeln bei der Interaktion mit den Daten angewendet werden.

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