Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Nach Web Camps Team
Download Web Camps Training Kit
In ASP.NET MVC 4 Models and Data Access Hands-on Lab haben Sie Daten aus der Datenbank geladen und angezeigt. In dieser praktischen Übung fügen Sie der Music Store-Anwendung die Möglichkeit hinzu, diese Daten zu bearbeiten.
Mit diesem Ziel erstellen Sie zuerst den Controller, der die CRUD-Aktionen (Create, Read, Update and Delete) von Alben unterstützt. Sie generieren eine Indexansichtsvorlage, die ASP.NET MVC-Gerüstfunktion nutzt, um die Eigenschaften der Alben in einer HTML-Tabelle anzuzeigen. Um diese Ansicht zu verbessern, fügen Sie ein benutzerdefiniertes HTML-Hilfsprogramm hinzu, das lange Beschreibungen abschneidet.
Anschließend fügen Sie die Bearbeitungs- und Erstellungsansichten hinzu, mit denen Sie die Alben in der Datenbank mit Hilfe von Formularelementen wie Dropdowns ändern können.
Schließlich können Sie Benutzern das Löschen eines Albums ermöglichen, und Außerdem verhindern Sie, dass benutzer falsche Daten eingeben, indem Sie ihre Eingabe überprüfen.
In diesem praktischen Übungslabor wird davon ausgegangen, dass Sie grundlegende Kenntnisse über ASP.NET MVC haben. Wenn Sie ASP.NET MVC noch nicht verwendet haben, empfehlen wir Ihnen, ASP.NET MVC Fundamentals Hands-on Lab zu durchlaufen.
Diese Übung führt Sie durch die Verbesserungen und neuen Features, die zuvor beschrieben wurden, indem kleinere Änderungen auf eine Beispielwebanwendung angewendet werden, die im Quellordner bereitgestellt wird.
Hinweis
Alle Beispielcode und Codeausschnitte sind im Web Camps Training Kit enthalten, verfügbar unter Microsoft-Web/WebCampTrainingKit Releases. Das projektspezifische Projekt für dieses Lab ist unter ASP.NET MVC 4 Helpers, Forms and Validation verfügbar.
Ziele
In dieser praktischen Übung erfahren Sie, wie Sie:
- Erstellen eines Controllers zur Unterstützung von CRUD-Vorgängen
- Generieren einer Indexansicht zum Anzeigen von Entitätseigenschaften in einer HTML-Tabelle
- Hinzufügen eines benutzerdefinierten HTML-Hilfsprogramms
- Erstellen und Anpassen einer Bearbeitungsansicht
- Unterscheiden zwischen Aktionsmethoden, die auf HTTP-GET- oder HTTP-POST-Aufrufe reagieren
- Hinzufügen und Anpassen einer Erstellungsansicht
- Behandeln des Löschens einer Entität
- Validieren von Benutzereingaben
Voraussetzungen
Sie müssen über die folgenden Elemente verfügen, um diese Übung abzuschließen:
- Microsoft Visual Studio Express 2012 für Web oder höher (lesen Sie Anhang A , um Anweisungen zur Installation zu erhalten).
Setup
Installieren von Codeausschnitten
Aus Gründen der Einfachheit ist ein Großteil des Codes, den Sie entlang dieser Übung verwalten, als Visual Studio-Codeausschnitte verfügbar. Führen Sie zum Installieren der Codeausschnitte die Datei ".\Source\Setup\CodeSnippets.vsi " aus.
Wenn Sie mit den Visual Studio Code Snippets nicht vertraut sind und erfahren möchten, wie Sie sie verwenden können, finden Sie in diesem Dokument den Anhang "Anhang B: Verwenden von Codeausschnitten".
Übungen
Die folgenden Übungen bilden dieses praktische Labor:
- Erstellen des Store-Manager-Controllers und der zugehörigen Indexansicht
- Hinzufügen eines HTML-Hilfsprogramms
- Erstellen der Bearbeitungsansicht
- Hinzufügen einer Ansicht "Erstellen"
- Behandeln des Löschens
- Hinzufügen der Validierung
- Verwenden von unaufdringlichen jQuery auf clientseitiger Seite
Hinweis
Jede Übung wird von einem Endordner begleitet, der die resultierende Lösung enthält, die Sie nach Abschluss der Übungen erhalten sollten. Sie können diese Lösung als Leitfaden verwenden, wenn Sie zusätzliche Hilfe beim Durcharbeiten der Übungen benötigen.
Geschätzte Zeit zum Abschließen dieses Labors: 60 Minuten
Übung 1: Erstellen des Store-Manager-Controllers und seiner Indexansicht
In dieser Übung erfahren Sie, wie Sie einen neuen Controller zur Unterstützung von CRUD-Vorgängen erstellen, seine Index-Aktionsmethode anpassen, um eine Liste von Alben aus der Datenbank zurückzugeben und schließlich eine Indexansichtsvorlage zu generieren, die das ASP.NET Gerüstfeature von MVC nutzt, um die Eigenschaften der Alben in einer HTML-Tabelle anzuzeigen.
Aufgabe 1 – Erstellen des StoreManagerControllers
In dieser Aufgabe erstellen Sie einen neuen Controller namens "StoreManagerController ", um CRUD-Vorgänge zu unterstützen.
Öffnen Sie die Begin-Lösung unter Source/Ex1-CreatingTheStoreManagerController/Begin/ Folder.
Sie müssen einige fehlende NuGet-Pakete herunterladen, bevor Sie fortfahren. Klicken Sie hierzu auf das Menü "Projekt", und wählen Sie "NuGet-Pakete verwalten" aus.
Klicken Sie im Dialogfeld "NuGet-Pakete verwalten" auf " Wiederherstellen ", um fehlende Pakete herunterzuladen.
Erstellen Sie schließlich die Lösung, indem Sie auf "Buildlösung erstellen | " klicken.
Hinweis
Einer der Vorteile der Verwendung von NuGet besteht darin, dass Sie nicht alle Bibliotheken in Ihrem Projekt versenden müssen, wodurch die Projektgröße reduziert wird. Mit NuGet Power Tools können Sie alle erforderlichen Bibliotheken beim ersten Ausführen des Projekts herunterladen, indem Sie die Paketversionen in der Datei "Packages.config" angeben. Aus diesem Grund müssen Sie diese Schritte ausführen, nachdem Sie eine vorhandene Lösung aus dieser Übung geöffnet haben.
Fügen Sie einen neuen Controller hinzu. Klicken Sie dazu im Projektmappen-Explorer mit der rechten Maustaste auf den Ordner "Controller", wählen Sie "Hinzufügen" und dann den Befehl "Controller" aus. Ändern Sie den Controllernamen in StoreManagerController, und stellen Sie sicher, dass der MVC-Controller mit leeren Lese-/Schreibaktionen ausgewählt ist. Klicken Sie auf Hinzufügen.
Dialogfeld "Controller hinzufügen"
Eine neue Controllerklasse wird generiert. Da Sie angegeben haben, Aktionen für Lese-/Schreibzugriff hinzuzufügen, werden stubische Methoden für diese erstellt, allgemeine CRUD-Aktionen mit ausgefüllten TODO-Kommentaren erstellt, und sie werden aufgefordert, die anwendungsspezifische Logik einzuschließen.
Aufgabe 2 – Anpassen des StoreManager-Index
In dieser Aufgabe passen Sie die StoreManager Index-Aktionsmethode an, um eine Ansicht mit der Liste der Alben aus der Datenbank zurückzugeben.
Fügen Sie in der StoreManagerController-Klasse die folgenden using-Direktiven hinzu.
(Codeausschnitt - ASP.NET MVC 4 Helpers and Forms and Validation - Ex1 using MvcMusicStore)
using System.Data; using System.Data.Entity; using MvcMusicStore.Models;
Fügen Sie dem StoreManagerController ein Feld hinzu, um eine Instanz von MusicStoreEntities zu speichern.
(Codeausschnitt - ASP.NET MVC 4 Helpers and Forms and Validation - Ex1 MusicStoreEntities)
public class StoreManagerController : Controller { private MusicStoreEntities db = new MusicStoreEntities();
Implementieren Sie die StoreManagerController Index-Aktion, um eine Ansicht mit der Liste der Alben zurückzugeben.
Die Controller-Aktionslogik ähnelt der zuvor geschriebenen Index-Aktion des StoreControllers. Verwenden Sie LINQ, um alle Alben abzurufen, einschließlich Genre- und Künstlerinformationen zur Anzeige.
(Codeausschnitt - ASP.NET MVC 4 Helpers and Forms and Validation - Ex1 StoreManagerController Index)
// // GET: /StoreManager/ public ActionResult Index() { var albums = this.db.Albums.Include(a => a.Genre).Include(a => a.Artist) .OrderBy(a => a.Price); return this.View(albums.ToList()); }
Aufgabe 3 – Erstellen der Indexansicht
In dieser Aufgabe erstellen Sie die Indexansichtsvorlage, um die Liste der Alben anzuzeigen, die vom StoreManager Controller zurückgegeben werden.
Bevor Sie die neue Ansichtsvorlage erstellen, sollten Sie das Projekt erstellen, damit das Dialogfeld "Ansicht hinzufügen" die zu verwendende Albumklasse kennt. Build auswählen | Erstellen Sie MvcMusicStore , um das Projekt zu erstellen.
Klicken Sie mit der rechten Maustaste in die Index-Aktionsmethode, und wählen Sie "Ansicht hinzufügen" aus. Dadurch wird das Dialogfeld "Ansicht hinzufügen" angezeigt.
Hinzufügen einer Ansicht aus der Index-Methode
Überprüfen Sie im Dialogfeld "Ansicht hinzufügen", ob der Ansichtsname "Index" ist. Wählen Sie die Option "Stark typografische Ansicht erstellen" aus, und wählen Sie "Album" (MvcMusicStore.Models) aus der Dropdownliste " Modellklasse " aus. Wählen Sie "Liste " aus der Dropdownliste "Gerüstvorlage " aus. Lassen Sie das Ansichtsmodul auf Razor und die anderen Felder mit ihrem Standardwert, und klicken Sie dann auf "Hinzufügen".
Hinzufügen einer Indexansicht
Aufgabe 4 – Anpassen des Gerüsts der Indexansicht
In dieser Aufgabe passen Sie die einfache Ansichtsvorlage an, die mit ASP.NET MVC-Gerüstfunktion erstellt wurde, damit sie die gewünschten Felder anzeigt.
Hinweis
Die Gerüstunterstützung in ASP.NET MVC generiert eine einfache Ansichtsvorlage, die alle Felder im Albummodell auflistet. Gerüste bieten eine schnelle Möglichkeit, um mit einer stark typierten Ansicht zu beginnen: Anstatt die Ansichtsvorlage manuell schreiben zu müssen, generiert Gerüste schnell eine Standardvorlage, und dann können Sie den generierten Code ändern.
Überprüfen Sie den erstellten Code. Die generierte Liste der Felder ist Teil der folgenden HTML-Tabelle, die das Gerüst zum Anzeigen von Tabellendaten verwendet.
@model IEnumerable<MvcMusicStore.Models.Album> @{ ViewBag.Title = "Index"; } <h2>Index</h2> <p> @Html.ActionLink("Create New", "Create") </p> <table> <tr> <th> @Html.DisplayNameFor(model => model.GenreId) </th> <th> @Html.DisplayNameFor(model => model.ArtistId) </th> <th> @Html.DisplayNameFor(model => model.Title) </th> <th> @Html.DisplayNameFor(model => model.Price) </th> <th> @Html.DisplayNameFor(model => model.AlbumArtUrl) </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.GenreId) </td> <td> @Html.DisplayFor(modelItem => item.ArtistId) </td> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.AlbumArtUrl) </td> <td> @Html.ActionLink("Edit", "Edit", new { id=item.AlbumId }) | @Html.ActionLink("Details", "Details", new { id=item.AlbumId }) | @Html.ActionLink("Delete", "Delete", new { id=item.AlbumId }) </td> </tr> } </table>
Ersetzen Sie den <Tabellencode> durch den folgenden Code, um nur die Felder Genre, Künstler, Albumtitel und Preis anzuzeigen. Dadurch werden die Spalten "AlbumId " und "AlbumArt" gelöscht. Außerdem werden die Spalten GenreId und ArtistId geändert, um die verknüpften Klasseneigenschaften von Artist.Name und Genre.Name anzuzeigen und den Link "Details" zu entfernen.
<table> <tr> <th></th> <th>Genre</th> <th>Artist</th> <th>Title</th> <th>Price</th> </tr> @foreach (var item in Model) { <tr> <td> @Html.ActionLink("Edit", "Edit", new { id=item.AlbumId }) | @Html.ActionLink("Delete", "Delete", new { id=item.AlbumId }) </td> <td> @Html.DisplayFor(modelItem => item.Genre.Name) </td> <td> @Html.DisplayFor(modelItem => item.Artist.Name) </td> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> </tr> } </table>
Ändern Sie die folgenden Beschreibungen.
@model IEnumerable<MvcMusicStore.Models.Album> @{ ViewBag.Title = "Store Manager - All Albums"; } <h2>Albums</h2>
Aufgabe 5 – Ausführen der Anwendung
In dieser Aufgabe testen Sie, dass die Vorlage "StoreManager Index View" eine Liste von Alben gemäß dem Entwurf der vorherigen Schritte anzeigt.
Drücken Sie F5 , um die Anwendung auszuführen.
Das Projekt beginnt auf der Startseite. Ändern Sie die URL in "/StoreManager ", um zu überprüfen, ob eine Liste von Alben angezeigt wird und deren Titel, Künstler und Genre angezeigt wird.
Durchsuchen der Liste der Alben
Übung 2: Hinzufügen eines HTML-Hilfsprogramms
Die StoreManager Index-Seite hat ein potenzielles Problem: Die Eigenschaften "Titel" und "Künstlername" können beide lang genug sein, um die Tabellenformatierung auszuwerfen. In dieser Übung erfahren Sie, wie Sie einen benutzerdefinierten HTML-Hilfsprogramm hinzufügen, um diesen Text abschneiden zu können.
In der folgenden Abbildung können Sie sehen, wie das Format aufgrund der Textlänge geändert wird, wenn Sie eine kleine Browsergröße verwenden.
Durchsuchen der Liste der Alben mit nicht abgeschnittenen Text
Aufgabe 1 – Erweitern des HTML-Hilfsmoduls
In dieser Aufgabe fügen Sie dem HTML-Objekt, das in ASP.NET MVC-Ansichten verfügbar gemacht wird, eine neue Methode zum Abschneiden hinzu. Dazu implementieren Sie eine Erweiterungsmethode für die integrierte System.Web.Mvc.HtmlHelper-Klasse, die von ASP.NET MVC bereitgestellt wird.
Hinweis
Weitere Informationen zu Erweiterungsmethoden finden Sie in diesem Msdn-Artikel. https://msdn.microsoft.com/library/bb383977.aspx.
Öffnen Sie die Begin-Lösung im Ordner "Source/Ex2-AddingAnHTMLHelper/Begin/Begin/ ". Andernfalls verwenden Sie möglicherweise die, die Sie durch Ausführen der vorherigen Übung erhalten haben.
Wenn Sie die bereitgestellte Begin-Lösung geöffnet haben, müssen Sie einige fehlende NuGet-Pakete herunterladen, bevor Sie fortfahren. Klicken Sie hierzu auf das Menü "Projekt", und wählen Sie "NuGet-Pakete verwalten" aus.
Klicken Sie im Dialogfeld "NuGet-Pakete verwalten" auf " Wiederherstellen ", um fehlende Pakete herunterzuladen.
Erstellen Sie schließlich die Lösung, indem Sie auf "Buildlösung erstellen | " klicken.
Hinweis
Einer der Vorteile der Verwendung von NuGet besteht darin, dass Sie nicht alle Bibliotheken in Ihrem Projekt versenden müssen, wodurch die Projektgröße reduziert wird. Mit NuGet Power Tools können Sie alle erforderlichen Bibliotheken beim ersten Ausführen des Projekts herunterladen, indem Sie die Paketversionen in der Datei "Packages.config" angeben. Aus diesem Grund müssen Sie diese Schritte ausführen, nachdem Sie eine vorhandene Lösung aus dieser Übung geöffnet haben.
Öffnen Sie die Indexansicht von StoreManager. Erweitern Sie dazu im Projektmappen-Explorer den Ordner "Ansichten" und dann den StoreManager, und öffnen Sie die Datei Index.cshtml.
Fügen Sie den folgenden Code unterhalb der @model-Direktive hinzu, um die Truncate-Hilfsmethode zu definieren.
@model IEnumerable<MvcMusicStore.Models.Album> @helper Truncate(string input, int length) { if (input.Length <= length) { @input } else { @input.Substring(0, length)<text>...</text> } } @{ ViewBag.Title = "Store Manager - All Albums"; } <h2>Albums</h2>
Aufgabe 2 – Abschneiden von Text auf der Seite
In dieser Aufgabe verwenden Sie die Truncate-Methode , um den Text in der Ansichtsvorlage abschneiden zu können.
Öffnen Sie die Indexansicht von StoreManager. Erweitern Sie dazu im Projektmappen-Explorer den Ordner "Ansichten" und dann den StoreManager, und öffnen Sie die Datei Index.cshtml.
Ersetzen Sie die Zeilen, die den Titel des Künstlernamens und des Albums anzeigen. Ersetzen Sie dazu die folgenden Zeilen.
<tr> <td> @Html.ActionLink("Edit", "Edit", new { id=item.AlbumId }) | @Html.ActionLink("Delete", "Delete", new { id=item.AlbumId }) </td> <td> @Html.DisplayFor(modelItem => item.Genre.Name) </td> <td> @Truncate(item.Artist.Name, 25) </td> <td> @Truncate(item.Title, 25) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> </tr>
Aufgabe 3 – Ausführen der Anwendung
In dieser Aufgabe testen Sie, dass die Vorlage "StoreManager Index View" den Titel und den Künstlernamen des Albums abschneidet.
Drücken Sie F5 , um die Anwendung auszuführen.
Das Projekt beginnt auf der Startseite. Ändern Sie die URL in "/StoreManager ", um zu überprüfen, ob lange Texte in der Spalte "Titel " und "Künstler " abgeschnitten werden.
Gekürzte Titel und Künstlernamen
Übung 3: Erstellen der Bearbeitungsansicht
In dieser Übung erfahren Sie, wie Sie ein Formular erstellen, damit Store-Manager ein Album bearbeiten können. Sie durchsuchen die URL /StoreManager/Edit/id (id ist die eindeutige ID des zu bearbeitenden Albums), wodurch ein HTTP-GET-Aufruf an den Server erfolgt.
Die Aktion "Controller Bearbeiten" ruft das entsprechende Album aus der Datenbank ab, erstellt ein StoreManagerViewModel-Objekt , um es zu kapseln (zusammen mit einer Liste der Künstler und Genres), und übergeben sie dann an eine Ansichtsvorlage, um die HTML-Seite wieder an den Benutzer zu rendern. Diese Seite enthält ein <Formularelement> mit Textfeldern und Dropdowns zum Bearbeiten der Albumeigenschaften.
Sobald der Benutzer die Werte des Albumformulars aktualisiert und auf die Schaltfläche "Speichern " klickt, werden die Änderungen über einen HTTP-POST-Rückruf an /StoreManager/Edit/id übermittelt. Obwohl die URL im letzten Aufruf unverändert bleibt, identifiziert ASP.NET MVC, dass es sich diesmal um eine HTTP-POST handelt und daher eine andere Edit-Action-Methode ausführt (eine mit [HttpPost]).
Aufgabe 1 – Implementieren der HTTP-GET Edit Action-Methode
In dieser Aufgabe implementieren Sie die HTTP-GET-Version der Edit-Action-Methode, um das entsprechende Album aus der Datenbank sowie eine Liste aller Genres und Künstler abzurufen. Sie packt diese Daten in das im letzten Schritt definierte StoreManagerViewModel-Objekt , das dann an eine Ansichtsvorlage übergeben wird, um die Antwort zu rendern.
Öffnen Sie die Begin-Lösung , die sich im Ordner "Source/Ex3-CreatingTheEditView/Begin/Begin/ " befindet. Andernfalls verwenden Sie möglicherweise die, die Sie durch Ausführen der vorherigen Übung erhalten haben.
Wenn Sie die bereitgestellte Begin-Lösung geöffnet haben, müssen Sie einige fehlende NuGet-Pakete herunterladen, bevor Sie fortfahren. Klicken Sie hierzu auf das Menü "Projekt", und wählen Sie "NuGet-Pakete verwalten" aus.
Klicken Sie im Dialogfeld "NuGet-Pakete verwalten" auf " Wiederherstellen ", um fehlende Pakete herunterzuladen.
Erstellen Sie schließlich die Lösung, indem Sie auf "Buildlösung erstellen | " klicken.
Hinweis
Einer der Vorteile der Verwendung von NuGet besteht darin, dass Sie nicht alle Bibliotheken in Ihrem Projekt versenden müssen, wodurch die Projektgröße reduziert wird. Mit NuGet Power Tools können Sie alle erforderlichen Bibliotheken beim ersten Ausführen des Projekts herunterladen, indem Sie die Paketversionen in der Datei "Packages.config" angeben. Aus diesem Grund müssen Sie diese Schritte ausführen, nachdem Sie eine vorhandene Lösung aus dieser Übung geöffnet haben.
Öffnen Sie die StoreManagerController-Klasse . Erweitern Sie dazu den Ordner "Controller" , und doppelklicken Sie auf StoreManagerController.cs.
Ersetzen Sie die HTTP-GET Edit-Aktionsmethode durch den folgenden Code, um das entsprechende Album sowie die Genres - und Künstlerlisten abzurufen.
(Codeausschnitt - ASP.NET MVC 4 Helpers and Forms and Validation - Ex3 StoreManagerController HTTP-GET Edit action)
public ActionResult Edit(int id) { Album album = this.db.Albums.Find(id); if (album == null) { return this.HttpNotFound(); } this.ViewBag.GenreId = new SelectList(this.db.Genres, "GenreId", "Name", album.GenreId); this.ViewBag.ArtistId = new SelectList(this.db.Artists, "ArtistId", "Name", album.ArtistId); return this.View(album); }
Hinweis
Sie verwenden System.Web.Mvc SelectList für Künstler und Genres anstelle der System.Collections.Generic List.
SelectList ist eine übersichtlichere Möglichkeit, HTML-Dropdowns aufzufüllen und Elemente wie die aktuelle Auswahl zu verwalten. Durch das Instanziieren und spätere Einrichten dieser ViewModel-Objekte in der Controlleraktion wird das Formularszenario übersichtlicher.
Aufgabe 2 – Erstellen der Bearbeitungsansicht
In dieser Aufgabe erstellen Sie eine Bearbeitungsansichtsvorlage, die später die Albumeigenschaften anzeigt.
Erstellen Sie die Bearbeitungsansicht. Klicken Sie hierzu mit der rechten Maustaste in die Aktionsmethode "Bearbeiten", und wählen Sie "Ansicht hinzufügen" aus.
Überprüfen Sie im Dialogfeld "Ansicht hinzufügen", ob der Ansichtsname "Bearbeiten" lautet. Aktivieren Sie das Kontrollkästchen "Stark typografische Ansicht erstellen", und wählen Sie "Album " (MvcMusicStore.Models) aus der Dropdownliste "Datenklasse anzeigen" aus. Wählen Sie "Bearbeiten" aus der Dropdownliste "Gerüstvorlage" aus. Belassen Sie die anderen Felder mit ihrem Standardwert, und klicken Sie dann auf "Hinzufügen".
Hinzufügen einer Bearbeitungsansicht
Aufgabe 3 – Ausführen der Anwendung
In dieser Aufgabe testen Sie, dass auf der Seite " StoreManager-Ansicht bearbeiten " die Werte der Eigenschaften für das als Parameter übergebene Album angezeigt werden.
Drücken Sie F5 , um die Anwendung auszuführen.
Das Projekt beginnt auf der Startseite. Ändern Sie die URL in "/StoreManager/Edit/1 ", um zu überprüfen, ob die Werte der Eigenschaften für das übergebene Album angezeigt werden.
Ansicht 'Album bearbeiten'
Aufgabe 4 – Implementieren von Dropdowns in der Album-Editor-Vorlage
In dieser Aufgabe fügen Sie der Ansichtsvorlage, die in der letzten Aufgabe erstellt wurde, Dropdowns hinzu, damit der Benutzer aus einer Liste der Künstler und Genres auswählen kann.
Ersetzen Sie den gesamten Album-Fieldset-Code durch Folgendes:
<fieldset> <legend>Album</legend> @Html.HiddenFor(model => model.AlbumId) <div class="editor-label"> @Html.LabelFor(model => model.Title) </div> <div class="editor-field"> @Html.EditorFor(model => model.Title) @Html.ValidationMessageFor(model => model.Title) </div> <div class="editor-label"> @Html.LabelFor(model => model.Price) </div> <div class="editor-field"> @Html.EditorFor(model => model.Price) @Html.ValidationMessageFor(model => model.Price) </div> <div class="editor-label"> @Html.LabelFor(model => model.AlbumArtUrl) </div> <div class="editor-field"> @Html.EditorFor(model => model.AlbumArtUrl) @Html.ValidationMessageFor(model => model.AlbumArtUrl) </div> <div class="editor-label"> @Html.LabelFor(model => model.Artist) </div> <div class="editor-field"> @Html.DropDownList("ArtistId", (SelectList) ViewData["Artists"]) @Html.ValidationMessageFor(model => model.ArtistId) </div> <div class="editor-label"> @Html.LabelFor(model => model.Genre) </div> <div class="editor-field"> @Html.DropDownList("GenreId", (SelectList) ViewData["Genres"]) @Html.ValidationMessageFor(model => model.GenreId) </div> <p> <input type="submit" value="Save" /> </p> </fieldset>
Hinweis
Ein Html.DropDownList-Hilfsprogramm wurde hinzugefügt, um Dropdowns für die Auswahl von Künstlern und Genres zu rendern. Die parameter, die an Html.DropDownList übergeben werden, sind:
- Der Name des Formularfelds ("ArtistId").
- Die SelectList von Werten für die Dropdownliste.
Aufgabe 5 – Ausführen der Anwendung
In dieser Aufgabe testen Sie, dass auf der Seite " StoreManager-Ansicht bearbeiten " Dropdowns anstelle von Textfeldern "Künstler- und Genre-ID" angezeigt werden.
Drücken Sie F5 , um die Anwendung auszuführen.
Das Projekt beginnt auf der Startseite. Ändern Sie die URL in "/StoreManager/Edit/1 ", um zu überprüfen, ob Dropdowns anstelle von Textfeldern für Künstler- und Genre-ID angezeigt werden.
Ansicht "Album bearbeiten" dieses Mal mit Dropdowns
Aufgabe 6 – Implementieren der HTTP-POST Edit-Aktionsmethode
Nachdem die Bearbeitungsansicht erwartungsgemäß angezeigt wird, müssen Sie die HTTP-POST Edit Action-Methode implementieren, um die am Album vorgenommenen Änderungen zu speichern.
Schließen Sie den Browser bei Bedarf, um zum Visual Studio-Fenster zurückzukehren. Öffnen Sie StoreManagerController aus dem Ordner "Controller" .
Ersetzen Sie den Code der HTTP-POST Edit-Aktion durch den folgenden Code (beachten Sie, dass die zu ersetzende Methode eine überladene Version ist, die zwei Parameter empfängt):
(Codeausschnitt - ASP.NET MVC 4 Helpers and Forms and Validation - Ex3 StoreManagerController HTTP-POST Edit Action)
[HttpPost] public ActionResult Edit(Album album) { if (ModelState.IsValid) { this.db.Entry(album).State = EntityState.Modified; this.db.SaveChanges(); return this.RedirectToAction("Index"); } this.ViewBag.GenreId = new SelectList(this.db.Genres, "GenreId", "Name", album.GenreId); this.ViewBag.ArtistId = new SelectList(this.db.Artists, "ArtistId", "Name", album.ArtistId); return this.View(album); }
Hinweis
Diese Methode wird ausgeführt, wenn der Benutzer auf die Schaltfläche "Speichern " der Ansicht klickt und einen HTTP-POST der Formularwerte zurück an den Server ausführt, um sie in der Datenbank zu speichern. Der Dekorateur [HttpPost] gibt an, dass die Methode für diese HTTP-POST-Szenarien verwendet werden soll. Die Methode verwendet ein Album-Objekt . ASP.NET MVC erstellt automatisch das Album-Objekt aus den bereitgestellten <Formularwerten> .
Die Methode führt die folgenden Schritte aus:
Wenn das Modell gültig ist:
- Aktualisieren Sie den Albumeintrag im Kontext, um ihn als geändertes Objekt zu markieren.
- Speichern Sie die Änderungen, und leiten Sie sie an die Indexansicht um.
Wenn das Modell ungültig ist, füllt es das ViewBag mit der GenreId und ArtistId auf, und es gibt die Ansicht mit dem empfangenen Albumobjekt zurück, damit der Benutzer alle erforderlichen Aktualisierungen ausführen kann.
Aufgabe 7 – Ausführen der Anwendung
In dieser Aufgabe testen Sie, dass die Seite "StoreManager-Ansicht bearbeiten " die aktualisierten Albumdaten in der Datenbank speichert.
Drücken Sie F5 , um die Anwendung auszuführen.
Das Projekt beginnt auf der Startseite. Ändern Sie die URL in "/StoreManager/Edit/1". Ändern Sie den Titel des Albums in "Laden", und klicken Sie auf "Speichern". Überprüfen Sie, ob der Titel des Albums tatsächlich in der Liste der Alben geändert wurde.
Aktualisieren eines Albums
Übung 4: Hinzufügen einer Ansicht "Erstellen"
Nachdem der StoreManagerController die Bearbeitungsmöglichkeit unterstützt, erfahren Sie in dieser Übung, wie Sie eine Vorlage "Ansicht erstellen" hinzufügen, damit Store-Manager der Anwendung neue Alben hinzufügen können.
Wie bei der Funktion "Bearbeiten" implementieren Sie das Szenario "Erstellen" mit zwei separaten Methoden in der StoreManagerController-Klasse :
- Eine Aktionsmethode zeigt ein leeres Formular an, wenn Store-Manager zuerst die URL "/StoreManager/Create " besuchen.
- Eine zweite Aktionsmethode behandelt das Szenario, in dem der Store-Manager auf die Schaltfläche "Speichern " im Formular klickt, und sendet die Werte als HTTP-POST an den /StoreManager/Create-URL zurück.
Aufgabe 1 – Implementieren der HTTP-GET Create-Aktionsmethode
In dieser Aufgabe implementieren Sie die HTTP-GET-Version der Create-Aktionsmethode, um eine Liste aller Genres und Künstler abzurufen, verpacken Sie diese Daten in ein StoreManagerViewModel -Objekt, das dann an eine Ansichtsvorlage übergeben wird.
Öffnen Sie die Begin-Lösung unter Source/Ex4-AddingACreateView/Begin/ Folder. Andernfalls verwenden Sie möglicherweise die, die Sie durch Ausführen der vorherigen Übung erhalten haben.
Wenn Sie die bereitgestellte Begin-Lösung geöffnet haben, müssen Sie einige fehlende NuGet-Pakete herunterladen, bevor Sie fortfahren. Klicken Sie hierzu auf das Menü "Projekt", und wählen Sie "NuGet-Pakete verwalten" aus.
Klicken Sie im Dialogfeld "NuGet-Pakete verwalten" auf " Wiederherstellen ", um fehlende Pakete herunterzuladen.
Erstellen Sie schließlich die Lösung, indem Sie auf "Buildlösung erstellen | " klicken.
Hinweis
Einer der Vorteile der Verwendung von NuGet besteht darin, dass Sie nicht alle Bibliotheken in Ihrem Projekt versenden müssen, wodurch die Projektgröße reduziert wird. Mit NuGet Power Tools können Sie alle erforderlichen Bibliotheken beim ersten Ausführen des Projekts herunterladen, indem Sie die Paketversionen in der Datei "Packages.config" angeben. Aus diesem Grund müssen Sie diese Schritte ausführen, nachdem Sie eine vorhandene Lösung aus dieser Übung geöffnet haben.
Open StoreManagerController-Klasse . Erweitern Sie dazu den Ordner "Controller" , und doppelklicken Sie auf StoreManagerController.cs.
Ersetzen Sie den Code der Create-Aktionsmethode durch Folgendes:
(Codeausschnitt - ASP.NET MVC 4 Helpers and Forms and Validation - Ex4 StoreManagerController HTTP-GET Create action)
// // GET: /StoreManager/Create public ActionResult Create() { this.ViewBag.GenreId = new SelectList(this.db.Genres, "GenreId", "Name"); this.ViewBag.ArtistId = new SelectList(this.db.Artists, "ArtistId", "Name"); return this.View(); }
Aufgabe 2 – Hinzufügen der Ansicht "Erstellen"
In dieser Aufgabe fügen Sie die Vorlage "Ansicht erstellen" hinzu, die ein neues (leeres) Albumformular anzeigt.
Klicken Sie mit der rechten Maustaste in die Methode "Aktion erstellen", und wählen Sie "Ansicht hinzufügen" aus. Dadurch wird das Dialogfeld "Ansicht hinzufügen" angezeigt.
Überprüfen Sie im Dialogfeld "Ansicht hinzufügen", ob der Ansichtsname erstellt ist. Wählen Sie die Option "Ansicht mit starkem Typ erstellen" und dann "Album " (MvcMusicStore.Models) aus der Dropdownliste "Modellklasse" und "Erstellen" aus der Dropdownliste "Gerüstvorlage erstellen" aus. Belassen Sie die anderen Felder mit ihrem Standardwert, und klicken Sie dann auf "Hinzufügen".
Hinzufügen der Ansicht "Erstellen"
Aktualisieren Sie die Felder "GenreId " und "ArtistId ", um eine Dropdownliste wie unten dargestellt zu verwenden:
... <fieldset> <legend>Album</legend> <div class="editor-label"> @Html.LabelFor(model => model.GenreId, "Genre") </div> <div class="editor-field"> @Html.DropDownList("GenreId", String.Empty) @Html.ValidationMessageFor(model => model.GenreId) </div> <div class="editor-label"> @Html.LabelFor(model => model.ArtistId, "Artist") </div> <div class="editor-field"> @Html.DropDownList("ArtistId", String.Empty) @Html.ValidationMessageFor(model => model.ArtistId) </div> <div class="editor-label"> @Html.LabelFor(model => model.Title) </div> ...
Aufgabe 3 – Ausführen der Anwendung
In dieser Aufgabe testen Sie, dass auf der Seite "StoreManager-Ansicht erstellen " ein leeres Albumformular angezeigt wird.
Drücken Sie F5 , um die Anwendung auszuführen.
Das Projekt beginnt auf der Startseite. Ändern Sie die URL in "/StoreManager/Create". Stellen Sie sicher, dass ein leeres Formular zum Ausfüllen der neuen Albumeigenschaften angezeigt wird.
Ansicht mit einem leeren Formular erstellen
Aufgabe 4 – Implementieren der HTTP-POST Create Action-Methode
In dieser Aufgabe implementieren Sie die HTTP-POST-Version der Create-Aktionsmethode, die aufgerufen wird, wenn ein Benutzer auf die Schaltfläche "Speichern " klickt. Die Methode sollte das neue Album in der Datenbank speichern.
Schließen Sie den Browser bei Bedarf, um zum Visual Studio-Fenster zurückzukehren. Open StoreManagerController-Klasse . Erweitern Sie dazu den Ordner "Controller" , und doppelklicken Sie auf StoreManagerController.cs.
Ersetzen Sie den Code der HTTP-POST Create-Aktionsmethode durch Folgendes:
(Codeausschnitt - ASP.NET MVC 4 Helpers and Forms and Validation - Ex4 StoreManagerController HTTP- POST Create-Aktion)
[HttpPost] public ActionResult Create(Album album) { if (ModelState.IsValid) { this.db.Albums.Add(album); this.db.SaveChanges(); return this.RedirectToAction("Index"); } this.ViewBag.GenreId = new SelectList(this.db.Genres, "GenreId", "Name", album.GenreId); this.ViewBag.ArtistId = new SelectList(this.db.Artists, "ArtistId", "Name", album.ArtistId); return this.View(album); }
Hinweis
Die Aktion "Erstellen" ähnelt der vorherigen Edit-Aktionsmethode, aber anstatt das Objekt als geändert festzulegen, wird sie dem Kontext hinzugefügt.
Aufgabe 5 – Ausführen der Anwendung
In dieser Aufgabe testen Sie, dass sie auf der Seite "StoreManager-Ansicht erstellen " ein neues Album erstellen und dann zur StoreManager-Indexansicht umleitet.
Drücken Sie F5 , um die Anwendung auszuführen.
Das Projekt beginnt auf der Startseite. Ändern Sie die URL in "/StoreManager/Create". Füllen Sie alle Formularfelder mit Daten für ein neues Album aus, wie in der folgenden Abbildung:
Erstellen eines Albums
Stellen Sie sicher, dass Sie zur StoreManager-Indexansicht umgeleitet werden, die das gerade erstellte neue Album enthält.
Neues Album erstellt
Übung 5: Behandeln von Löschungen
Die Möglichkeit zum Löschen von Alben ist noch nicht implementiert. Dies ist, worum es bei dieser Übung geht. Wie zuvor implementieren Sie das Delete-Szenario mit zwei separaten Methoden in der StoreManagerController-Klasse :
- Eine Aktionsmethode zeigt ein Bestätigungsformular an.
- Eine zweite Aktionsmethode behandelt die Formularübermittlung
Aufgabe 1 : Implementieren der HTTP-GET Delete Action-Methode
In dieser Aufgabe implementieren Sie die HTTP-GET-Version der Delete-Aktionsmethode, um die Informationen des Albums abzurufen.
Öffnen Sie die Begin-Lösung , die sich im Ordner "Source/Ex5-HandlingDeletion/Begin/ " befindet. Andernfalls verwenden Sie möglicherweise die, die Sie durch Ausführen der vorherigen Übung erhalten haben.
Wenn Sie die bereitgestellte Begin-Lösung geöffnet haben, müssen Sie einige fehlende NuGet-Pakete herunterladen, bevor Sie fortfahren. Klicken Sie hierzu auf das Menü "Projekt", und wählen Sie "NuGet-Pakete verwalten" aus.
Klicken Sie im Dialogfeld "NuGet-Pakete verwalten" auf " Wiederherstellen ", um fehlende Pakete herunterzuladen.
Erstellen Sie schließlich die Lösung, indem Sie auf "Buildlösung erstellen | " klicken.
Hinweis
Einer der Vorteile der Verwendung von NuGet besteht darin, dass Sie nicht alle Bibliotheken in Ihrem Projekt versenden müssen, wodurch die Projektgröße reduziert wird. Mit NuGet Power Tools können Sie alle erforderlichen Bibliotheken beim ersten Ausführen des Projekts herunterladen, indem Sie die Paketversionen in der Datei "Packages.config" angeben. Aus diesem Grund müssen Sie diese Schritte ausführen, nachdem Sie eine vorhandene Lösung aus dieser Übung geöffnet haben.
Open StoreManagerController-Klasse . Erweitern Sie dazu den Ordner "Controller" , und doppelklicken Sie auf StoreManagerController.cs.
Die Aktion "Controller löschen" entspricht genau der vorherigen Aktion des Store-Details-Controllers: Sie fragt das Albumobjekt aus der Datenbank mithilfe der in der URL angegebenen ID ab und gibt die entsprechende Ansicht zurück. Ersetzen Sie dazu den HTTP-GET Delete-Aktionsmethodencode durch Folgendes:
(Codeausschnitt - ASP.NET MVC 4 Helpers and Forms and Validation - Ex5 Handling Delete HTTP-GET Delete action)
// // GET: /StoreManager/Delete/5 public ActionResult Delete(int id) { Album album = this.db.Albums.Find(id); if (album == null) { return this.HttpNotFound(); } return this.View(album); }
Klicken Sie mit der rechten Maustaste in die Delete-Aktionsmethode, und wählen Sie "Ansicht hinzufügen" aus. Dadurch wird das Dialogfeld "Ansicht hinzufügen" angezeigt.
Überprüfen Sie im Dialogfeld "Ansicht hinzufügen", ob der Ansichtsname "Löschen" lautet. Wählen Sie die Option "Stark typografische Ansicht erstellen" aus, und wählen Sie "Album " (MvcMusicStore.Models) aus der Dropdownliste " Modellklasse " aus. Wählen Sie "Löschen " aus der Dropdownliste "Gerüstvorlage " aus. Belassen Sie die anderen Felder mit ihrem Standardwert, und klicken Sie dann auf "Hinzufügen".
Hinzufügen einer Löschansicht
Die Vorlage "Löschen" zeigt alle Felder aus dem Modell an. Sie zeigen nur den Titel des Albums an. Ersetzen Sie dazu den Inhalt der Ansicht durch den folgenden Code:
@model MvcMusicStore.Models.Album @{ ViewBag.Title = "Delete"; } <h2>Delete Confirmation</h2> <h3> Are you sure you want to delete the album title <strong>@Model.Title </strong> ? </h3> @using (Html.BeginForm()) { <p> <input type="submit" value="Delete" /> | @Html.ActionLink("Back to List", "Index") </p> }
Aufgabe 2 – Ausführen der Anwendung
In dieser Aufgabe testen Sie, dass auf der Seite " StoreManager Delete View" ein Bestätigungslöschformular angezeigt wird.
Drücken Sie F5 , um die Anwendung auszuführen.
Das Projekt beginnt auf der Startseite. Ändern Sie die URL in "/StoreManager". Wählen Sie ein Album aus, das gelöscht werden soll, indem Sie auf "Löschen" klicken und überprüfen, ob die neue Ansicht hochgeladen wurde.
Löschen eines Albums
Aufgabe 3: Implementieren der HTTP-POST-Löschaktionsmethode
In dieser Aufgabe implementieren Sie die HTTP-POST-Version der Delete-Aktionsmethode, die aufgerufen wird, wenn ein Benutzer auf die Schaltfläche "Löschen " klickt. Die Methode sollte das Album in der Datenbank löschen.
Schließen Sie den Browser bei Bedarf, um zum Visual Studio-Fenster zurückzukehren. Open StoreManagerController-Klasse . Erweitern Sie dazu den Ordner "Controller" , und doppelklicken Sie auf StoreManagerController.cs.
Ersetzen Sie den Http-POST Delete-Aktionsmethodencode durch Folgendes:
(Codeausschnitt - ASP.NET MVC 4 Helpers and Forms and Validation - Ex5 Handling Delete HTTP-POST Delete Action)
// // POST: /StoreManager/Delete/5 [HttpPost] public ActionResult Delete(int id, FormCollection collection) { Album album = this.db.Albums.Find(id); this.db.Albums.Remove(album); this.db.SaveChanges(); return this.RedirectToAction("Index"); }
Aufgabe 4 – Ausführen der Anwendung
In dieser Aufgabe testen Sie, dass sie auf der Seite "StoreManager Delete View" ein Album löschen und dann zur StoreManager-Indexansicht umleitet.
Drücken Sie F5 , um die Anwendung auszuführen.
Das Projekt beginnt auf der Startseite. Ändern Sie die URL in "/StoreManager". Wählen Sie ein Album aus, das gelöscht werden soll, indem Sie auf "Löschen" klicken. Bestätigen Sie den Löschvorgang, indem Sie auf die Schaltfläche "Löschen" klicken:
Löschen eines Albums
Überprüfen Sie, ob das Album gelöscht wurde, da es nicht auf der Indexseite angezeigt wird.
Übung 6: Hinzufügen der Validierung
Derzeit führen die von Ihnen eingerichteten Formulare zum Erstellen und Bearbeiten keine Überprüfung aus. Wenn der Benutzer ein Pflichtfeld leer lässt oder Buchstaben in das Preisfeld eingibt, stammt der erste Fehler, den Sie erhalten, aus der Datenbank.
Sie können der Anwendung eine Überprüfung hinzufügen, indem Sie Ihrer Modellklasse Datenanmerkungen hinzufügen. Datenanmerkungen ermöglichen das Beschreiben der Regeln, die Sie auf Ihre Modelleigenschaften anwenden möchten, und ASP.NET MVC übernimmt die Erzwingung und Anzeige geeigneter Nachrichten für Benutzer.
Aufgabe 1 – Hinzufügen von Datenanmerkungen
In dieser Aufgabe fügen Sie dem Albummodell Datenanmerkungen hinzu, die die Überprüfungsmeldungen der Seite erstellen und bearbeiten bei Bedarf anzeigen.
Für eine einfache Model-Klasse wird das Hinzufügen einer Datenanmerkung einfach behandelt, indem eine using-Anweisung für System.ComponentModel.DataAnnotation hinzugefügt und dann ein [Required]-Attribut für die entsprechenden Eigenschaften platziert wird. Im folgenden Beispiel wird die Name-Eigenschaft in der Ansicht zu einem erforderlichen Feld.
using System.ComponentModel.DataAnnotations;
namespace SuperheroSample.Models
{
public class Superhero
{
[Required]
public string Name { get; set; }
public bool WearsCape { get; set; }
}
}
Dies ist etwas komplexer in Fällen wie dieser Anwendung, in denen das Entitätsdatenmodell generiert wird. Wenn Sie datenanmerkungen direkt zu den Modellklassen hinzugefügt haben, werden diese überschrieben, wenn Sie das Modell aus der Datenbank aktualisieren. Stattdessen können Sie Metadatenteilklassen verwenden, die zum Speichern der Anmerkungen vorhanden sind und den Modellklassen mithilfe des [MetadataType] -Attributs zugeordnet sind.
Öffnen Sie die Begin-Lösung unter Source/Ex6-AddingValidation/Begin/ Folder. Andernfalls verwenden Sie möglicherweise die, die Sie durch Ausführen der vorherigen Übung erhalten haben.
Wenn Sie die bereitgestellte Begin-Lösung geöffnet haben, müssen Sie einige fehlende NuGet-Pakete herunterladen, bevor Sie fortfahren. Klicken Sie hierzu auf das Menü "Projekt", und wählen Sie "NuGet-Pakete verwalten" aus.
Klicken Sie im Dialogfeld "NuGet-Pakete verwalten" auf " Wiederherstellen ", um fehlende Pakete herunterzuladen.
Erstellen Sie schließlich die Lösung, indem Sie auf "Buildlösung erstellen | " klicken.
Hinweis
Einer der Vorteile der Verwendung von NuGet besteht darin, dass Sie nicht alle Bibliotheken in Ihrem Projekt versenden müssen, wodurch die Projektgröße reduziert wird. Mit NuGet Power Tools können Sie alle erforderlichen Bibliotheken beim ersten Ausführen des Projekts herunterladen, indem Sie die Paketversionen in der Datei "Packages.config" angeben. Aus diesem Grund müssen Sie diese Schritte ausführen, nachdem Sie eine vorhandene Lösung aus dieser Übung geöffnet haben.
Öffnen Sie die Album.cs aus dem Ordner "Models".
Ersetzen Sie Album.cs Inhalt durch den hervorgehobenen Code, damit er wie folgt aussieht:
Hinweis
Die Zeile [DisplayFormat(ConvertEmptyStringToNull=false)] gibt an, dass leere Zeichenfolgen aus dem Modell nicht in NULL konvertiert werden, wenn das Datenfeld in der Datenquelle aktualisiert wird. Mit dieser Einstellung wird eine Ausnahme vermieden, wenn das Entity Framework dem Modell Nullwerte zuweist, bevor die Felder von Datenanmerkungen überprüft werden.
(Codeausschnitt - ASP.NET MVC 4 Helpers and Forms and Validation - Ex6 Album metadata partial class)
namespace MvcMusicStore.Models { using System.ComponentModel; using System.ComponentModel.DataAnnotations; public class Album { [ScaffoldColumn(false)] public int AlbumId { get; set; } [DisplayName("Genre")] public int GenreId { get; set; } [DisplayName("Artist")] public int ArtistId { get; set; } [Required(ErrorMessage = "An Album Title is required")] [DisplayFormat(ConvertEmptyStringToNull = false)] [StringLength(160, MinimumLength = 2)] public string Title { get; set; } [Range(0.01, 100.00, ErrorMessage = "Price must be between 0.01 and 100.00")] [DataType(DataType.Currency)] public decimal Price { get; set; } [DisplayName("Album Art URL")] [DataType(DataType.ImageUrl)] [StringLength(1024)] public string AlbumArtUrl { get; set; } public virtual Genre Genre { get; set; } public virtual Artist Artist { get; set; } } }
Hinweis
Diese Albumteilklasse weist ein MetadataType-Attribut auf, das auf die AlbumMetaData-Klasse für die Data Annotations verweist. Dies sind einige der Datenanmerkungsattribute, die Sie zum Kommentieren des Albummodells verwenden:
- Erforderlich – Gibt an, dass die Eigenschaft ein Pflichtfeld ist.
- DisplayName – Definiert den Text, der in Formularfeldern und Überprüfungsmeldungen verwendet werden soll.
- DisplayFormat – Gibt an, wie Datenfelder angezeigt und formatiert werden.
- StringLength – Definiert eine maximale Länge für ein Zeichenfolgenfeld.
- Bereich – Gibt einen maximalen und minimalen Wert für ein numerisches Feld an.
- ScaffoldColumn – Ermöglicht das Ausblenden von Feldern aus Editorformularen
Aufgabe 2 – Ausführen der Anwendung
In dieser Aufgabe testen Sie, ob die Felder "Seiten erstellen" und "Bearbeiten" mithilfe der anzeigenamen überprüft werden, die in der letzten Aufgabe ausgewählt wurden.
Drücken Sie F5 , um die Anwendung auszuführen.
Das Projekt beginnt auf der Startseite. Ändern Sie die URL in "/StoreManager/Create". Stellen Sie sicher, dass die Anzeigenamen mit den Anzeigenamen in der partiellen Klasse übereinstimmen (z . B. die Albumart-URL anstelle von AlbumArtUrl)
Klicken Sie auf " Erstellen", ohne das Formular auszufüllen. Stellen Sie sicher, dass Sie die entsprechenden Überprüfungsmeldungen erhalten.
Überprüfte Felder auf der Seite "Erstellen"
Sie können überprüfen, ob dasselbe mit der Seite "Bearbeiten" erfolgt. Ändern Sie die URL in "/StoreManager/Edit/1 ", und vergewissern Sie sich, dass die Anzeigenamen den Namen in der partiellen Klasse entsprechen (z . B. albumart-URL anstelle von AlbumArtUrl). Leeren Sie die Felder "Titel" und "Preis", und klicken Sie auf "Speichern". Stellen Sie sicher, dass Sie die entsprechenden Überprüfungsmeldungen erhalten.
Überprüfte Felder auf der Seite "Bearbeiten"
Übung 7: Verwenden von unaufdringlichen jQuery auf clientseitiger Seite
In dieser Übung erfahren Sie, wie Sie die MVC 4 Unobtrusive jQuery-Validierung auf clientseitiger Seite aktivieren.
Hinweis
Das unaufdringliche jQuery verwendet JavaScript mit dem Daten-Ajax-Präfix, um Aktionsmethoden auf dem Server aufzurufen, anstatt intrusiv inline-Clientskripts auszublenden.
Aufgabe 1 – Ausführen der Anwendung vor dem Aktivieren von unauffälligem jQuery
In dieser Aufgabe führen Sie die Anwendung vor dem Einschließen von jQuery aus, um beide Überprüfungsmodelle zu vergleichen.
Öffnen Sie die Begin-Lösung unter Source/Ex7-UnobtrusivejQueryValidation/Begin/ folder. Andernfalls verwenden Sie möglicherweise die, die Sie durch Ausführen der vorherigen Übung erhalten haben.
Wenn Sie die bereitgestellte Begin-Lösung geöffnet haben, müssen Sie einige fehlende NuGet-Pakete herunterladen, bevor Sie fortfahren. Klicken Sie hierzu auf das Menü "Projekt", und wählen Sie "NuGet-Pakete verwalten" aus.
Klicken Sie im Dialogfeld "NuGet-Pakete verwalten" auf " Wiederherstellen ", um fehlende Pakete herunterzuladen.
Erstellen Sie schließlich die Lösung, indem Sie auf "Buildlösung erstellen | " klicken.
Hinweis
Einer der Vorteile der Verwendung von NuGet besteht darin, dass Sie nicht alle Bibliotheken in Ihrem Projekt versenden müssen, wodurch die Projektgröße reduziert wird. Mit NuGet Power Tools können Sie alle erforderlichen Bibliotheken beim ersten Ausführen des Projekts herunterladen, indem Sie die Paketversionen in der Datei "Packages.config" angeben. Aus diesem Grund müssen Sie diese Schritte ausführen, nachdem Sie eine vorhandene Lösung aus dieser Übung geöffnet haben.
Drücken Sie F5, um die Anwendung auszuführen.
Das Projekt beginnt auf der Startseite. Durchsuchen Sie /StoreManager/Create, und klicken Sie auf "Erstellen", ohne das Formular auszufüllen, um zu überprüfen, ob Sie Überprüfungsmeldungen erhalten:
Clientüberprüfung deaktiviert
Öffnen Sie im Browser den HTML-Quellcode:
... <div class="editor-label"> <label for="Price">Price</label> </div> <div class="editor-field"> <input class="text-box single-line" id="Price" name="Price" type="text" value="" /> <span class="field-validation-valid" id="Price_validationMessage"></span> </div> <div class="editor-label"> <label for="AlbumArtUrl">Album Art URL</label> </div> <div class="editor-field"> <input class="text-box single-line" id="AlbumArtUrl" name="AlbumArtUrl" type="text" value="" /> <span class="field-validation-valid" id="AlbumArtUrl_validationMessage"></span> </div> <p> <input type="submit" value="Create" /> </p> </fieldset> </form><script type="text/javascript"> //<![CDATA[ if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; } window.mvcClientValidationMetadata.push({"Fields":[{"FieldName":"GenreId","ReplaceValidationMessageContents":true,"ValidationMessageId":"GenreId_validationMessage","ValidationRules":[{"ErrorMessage":"The Genre field is required.","ValidationParameters":{},"ValidationType":"required"},{"ErrorMessage":"The field Genre must be a number.","ValidationParameters":{},"ValidationType":"number"}]},{"FieldName":"ArtistId","ReplaceValidationMessageContents":true,"ValidationMessageId":"ArtistId_validationMessage","ValidationRules":[{"ErrorMessage":"The Artist field is required.","ValidationParameters":{},"ValidationType":"required"},{"ErrorMessage":"The field Artist must be a number.","ValidationParameters":{},"ValidationType":"number"}]},{"FieldName":"Title","ReplaceValidationMessageContents":true,"ValidationMessageId":"Title_validationMessage","ValidationRules":[{"ErrorMessage":"An Album Title is required","ValidationParameters":{},"ValidationType":"required"},{"ErrorMessage":"The field Title must be a string with a minimum length of 2 and a maximum length of 160.","ValidationParameters":{"min":2,"max":160},"ValidationType":"length"}]},{"FieldName":"Price","ReplaceValidationMessageContents":true,"ValidationMessageId":"Price_validationMessage","ValidationRules":[{"ErrorMessage":"Price must be between 0.01 and 100.00","ValidationParameters":{"min":0.01,"max":100},"ValidationType":"range"},{"ErrorMessage":"Price is required","ValidationParameters":{},"ValidationType":"required"},{"ErrorMessage":"The field Price must be a number.","ValidationParameters":{},"ValidationType":"number"}]},{"FieldName":"AlbumArtUrl","ReplaceValidationMessageContents":true,"ValidationMessageId":"AlbumArtUrl_validationMessage","ValidationRules":[{"ErrorMessage":"The field Album Art URL must be a string with a maximum length of 1024.","ValidationParameters":{"max":1024},"ValidationType":"length"}]}],"FormId":"form0","ReplaceValidationSummary":false,"ValidationSummaryId":"validationSummary"}); //]]> </script> ...
Aufgabe 2 – Aktivieren der unauffälligen Clientüberprüfung
In dieser Aufgabe aktivieren Sie die jQuery unauffällige Clientüberprüfung aus der Datei "Web.config ", die standardmäßig in allen neuen ASP.NET MVC 4-Projekten auf "false" festgelegt ist. Darüber hinaus fügen Sie die erforderlichen Skriptverweise hinzu, um jQuery Unobtrusive Client Validation zu funktionieren.
Öffnen Sie die Datei "Web.Config" im Projektstamm, und stellen Sie sicher, dass die Schlüsselwerte "ClientValidationEnabled " und "UnobtrusiveJavaScriptEnabled " auf "true" festgelegt sind.
... <configuration> <appSettings> <add key="webpages:Version" value="2.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="PreserveLoginUrl" value="true" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings> ...
Hinweis
Sie können die Clientüberprüfung auch durch Code bei Global.asax.cs aktivieren, um die gleichen Ergebnisse zu erhalten:
HtmlHelper.ClientValidationEnabled = true;
Darüber hinaus können Sie clientValidationEnabled-Attribut jedem Controller zuweisen, um ein benutzerdefiniertes Verhalten zu haben.
Öffnen Sie Create.cshtml unter Views\StoreManager.
Stellen Sie sicher, dass in der Ansicht über das Bundle "~/bundles/jqueryval" auf die folgenden Skriptdateien jquery.validate und jquery.validate.unobtrusive verwiesen wird.
... @section Scripts { @Scripts.Render("~/bundles/jqueryval") }
Hinweis
Alle diese jQuery-Bibliotheken sind in neuen MVC 4-Projekten enthalten. Weitere Bibliotheken finden Sie im Ordner "/Scripts " ihres Projekts.
Damit diese Überprüfungsbibliotheken funktionieren, müssen Sie einen Verweis auf die jQuery-Frameworkbibliothek hinzufügen. Da dieser Verweis bereits in der Datei _Layout.cshtml hinzugefügt wird, müssen Sie ihn nicht in dieser bestimmten Ansicht hinzufügen.
Aufgabe 3 : Ausführen der Anwendung mit unauffälliger jQuery-Validierung
In dieser Aufgabe testen Sie, dass die StoreManager-Ansichtsvorlage eine clientseitige Überprüfung mithilfe von jQuery-Bibliotheken durchführt, wenn der Benutzer ein neues Album erstellt.
Drücken Sie F5, um die Anwendung auszuführen.
Das Projekt beginnt auf der Startseite. Durchsuchen Sie /StoreManager/Create, und klicken Sie auf "Erstellen", ohne das Formular auszufüllen, um zu überprüfen, ob Sie Überprüfungsmeldungen erhalten:
Clientüberprüfung mit aktivierter jQuery
Öffnen Sie im Browser den Quellcode für die Ansicht "Erstellen":
... <div class="editor-label"> <label for="Title">Title</label> </div> <div class="editor-field"> <input class="text-box single-line" data-val="true" data-val-length="The field Title must be a string with a minimum length of 2 and a maximum length of 160." data-val-length-max="160" data-val-length-min="2" data-val-required="An Album Title is required" id="Title" name="Title" type="text" value="" /> <span class="field-validation-valid" data-valmsg-for="Title" data-valmsg-replace="true"></span> </div> <div class="editor-label"> <label for="Price">Price</label> </div> <div class="editor-field"> <input class="text-box single-line" data-val="true" data-val-number="The field Price must be a number." data-val-range="Price must be between 0.01 and 100.00" data-val-range-max="100" data-val-range-min="0.01" data-val-required="Price is required" id="Price" name="Price" type="text" value="" /> <span class="field-validation-valid" data-valmsg-for="Price" data-valmsg-replace="true"></span> </div> <div class="editor-label"> <label for="AlbumArtUrl">Album Art URL</label> </div> <div class="editor-field"> <input class="text-box single-line" data-val="true" data-val-length="The field Album Art URL must be a string with a maximum length of 1024." data-val-length-max="1024" id="AlbumArtUrl" name="AlbumArtUrl" type="text" value="" /> <span class="field-validation-valid" data-valmsg-for="AlbumArtUrl" data-valmsg-replace="true"></span> </div> ...
Hinweis
Für jede Clientüberprüfungsregel fügt Unbtrusive jQuery ein Attribut mit data-val-rulename="message" hinzu. Nachfolgend finden Sie eine Liste von Tags, die unaufdringlich jQuery in das HTML-Eingabefeld einfügt, um die Clientüberprüfung durchzuführen:
- Data-val
- Data-val-number
- Data-val-range
- Data-val-range-min / Data-val-range-max
- Data-val-required
- Datenwertlänge
- Data-val-length-max / Data-val-length-min
Alle Datenwerte werden mit dem Modell "Datenanmerkung" gefüllt. Anschließend kann die gesamte Logik, die auf serverseitiger Seite funktioniert, auf clientseitiger Ebene ausgeführt werden. Beispielsweise weist das Price-Attribut die folgende Datenanmerkung im Modell auf:
[Required(ErrorMessage = "Price is required")] [Range(0.01, 100.00, ErrorMessage = "Price must be between 0.01 and 100.00")] public object Price { get; set; }
Nach der Verwendung von Unobtrusive jQuery lautet der generierte Code:
<input data-val="true" data-val-number="The field Price must be a number." data-val-range="Price must be between 0.01 and 100.00" data-val-range-max="100" data-val-range-min="0.01" data-val-required="Price is required" id="Album_Price" name="Album.Price" type="text" value="0" />
Zusammenfassung
Wenn Sie diese praktische Übung abschließen, haben Sie erfahren, wie Sie Benutzern das Ändern der in der Datenbank gespeicherten Daten mithilfe der folgenden Möglichkeiten ermöglichen:
- Controlleraktionen wie Index, Erstellen, Bearbeiten, Löschen
- ASP.NET MVC-Gerüstfunktion zum Anzeigen von Eigenschaften in einer HTML-Tabelle
- Benutzerdefinierte HTML-Hilfsprogramme zur Verbesserung der Benutzererfahrung
- Aktionsmethoden, die auf HTTP-GET- oder HTTP-POST-Aufrufe reagieren
- Eine freigegebene Editorvorlage für ähnliche Ansichtsvorlagen wie "Erstellen und Bearbeiten"
- Formularelemente wie Dropdowns
- Datenanmerkungen für die Modellüberprüfung
- Clientseitige Überprüfung mithilfe der jQuery Unobtrusive-Bibliothek
Anhang A: Installieren von Visual Studio Express 2012 für Web
Sie können Microsoft Visual Studio Express 2012 für Web oder eine andere "Express"-Version mit dem Microsoft-Webplattform Installer installieren. Die folgenden Anweisungen führen Sie durch die Schritte, die zum Installieren von Visual Studio Express 2012 für Web mit Microsoft-Webplattform Installer erforderlich sind.
Wechseln Sie zu [/iis/extensions/introduction-to-iis-express/iis-express-overview?linkid=9810169](/iis/extensions/introduction-to-iis-express/iis-express-overview?linkid=9810169). Wenn Sie das Webplattform-Installationsprogramm bereits installiert haben, können Sie es öffnen und nach dem Produkt "Visual Studio Express 2012 for Web with Windows Azure SDK" suchen.
Klicken Sie auf "Jetzt installieren". Wenn Sie nicht über das Webplattform-Installationsprogramm verfügen, werden Sie umgeleitet, um es zuerst herunterzuladen und zu installieren.
Klicken Sie nach dem Öffnen des Webplattform-Installers auf "Installieren ", um das Setup zu starten.
Installieren von Visual Studio Express
Lesen Sie alle Lizenzen und Bedingungen der Produkte, und klicken Sie auf "Ich stimme zu", um den Vorgang fortzusetzen.
Akzeptieren der Lizenzbedingungen
Warten Sie, bis der Download- und Installationsprozess abgeschlossen ist.
Installationsfortschritt
Wenn die Installation abgeschlossen ist, klicken Sie auf "Fertig stellen".
Installation abgeschlossen
Klicken Sie auf "Beenden ", um den Webplattform-Installer zu schließen.
Um Visual Studio Express für Web zu öffnen, wechseln Sie zum Startbildschirm, und beginnen Sie mit dem Schreiben von "VS Express", und klicken Sie dann auf die VS Express für Webkachel.
VS Express für Webkachel
Anhang B: Verwenden von Codeausschnitten
Mit Codeausschnitten verfügen Sie über den gesamten Code, den Sie benötigen, jederzeit. Das Lab-Dokument teilt Ihnen genau mit, wann Sie sie verwenden können, wie in der folgenden Abbildung dargestellt.
Verwenden von Visual Studio-Codeausschnitten zum Einfügen von Code in Ihr Projekt
So fügen Sie einen Codeausschnitt mithilfe der Tastatur hinzu (nur C#)
- Platzieren Sie den Cursor an der Stelle, an der Sie den Code einfügen möchten.
- Beginnen Sie mit der Eingabe des Codeausschnittnamens (ohne Leerzeichen oder Bindestriche).
- Sehen Sie sich an, wie IntelliSense übereinstimmende Codeausschnittnamen anzeigt.
- Wählen Sie den richtigen Codeausschnitt aus (oder halten Sie die Eingabe, bis der Name des gesamten Codeausschnitts ausgewählt ist).
- Drücken Sie zweimal die TAB-TASTE, um den Codeausschnitt an der Cursorposition einzufügen.
Beginnen Sie mit der Eingabe des Codeausschnittnamens.
Drücken Sie die TAB-TASTE, um den hervorgehobenen Codeausschnitt auszuwählen.
Drücken Sie erneut die TAB-TASTE, und der Codeausschnitt wird erweitert.
So fügen Sie einen Codeausschnitt mit der Maus (C#, Visual Basic und XML) 1 hinzu. Klicken Sie mit der rechten Maustaste auf die Stelle, an der Sie den Codeausschnitt einfügen möchten.
- Wählen Sie "Codeausschnitt einfügen" gefolgt von "Codeausschnitte" aus.
- Wählen Sie den relevanten Codeausschnitt aus der Liste aus, indem Sie darauf klicken.
Klicken Sie mit der rechten Maustaste auf die Stelle, an der Sie den Codeausschnitt einfügen möchten, und wählen Sie "Codeausschnitt einfügen" aus.
Wählen Sie den relevanten Codeausschnitt aus der Liste aus, indem Sie darauf klicken.