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.
von Rick Anderson
Hinweis
Eine aktualisierte Version dieses Lernprogramms ist hier mit der neuesten Version von Visual Studio verfügbar. Das neue Lernprogramm verwendet ASP.NET Core MVC, was viele Verbesserungen in diesem Lernprogramm bietet.
Dieses Tutorial vermittelt Informationen zu ASP.NET Core MVC mit Controllern und Ansichten. Razor Pages ist eine neue Alternative in ASP.NET Core, einem seitenbasierten Programmiermodell, das das Erstellen von Web-UI erleichtert und produktiver macht. Es empfiehlt sich, dass Sie sich das Tutorial der Razor Pages vor der MVC-Version ansehen. Das Tutorial zu Razor Pages:
- Ist einfacher zu befolgen.
- Umfasst mehr Funktionen.
- Ist der bevorzugte Ansatz für die entwicklung neuer Apps.
In diesem Abschnitt erstellen Sie eine neue MoviesController Klasse und schreiben Code, der die Filmdaten abruft und im Browser mithilfe einer Ansichtsvorlage anzeigt.
Erstellen Sie die Anwendung , bevor Sie mit dem nächsten Schritt fortfahren. Wenn Sie die Anwendung nicht erstellen, wird ein Fehler beim Hinzufügen eines Controllers angezeigt.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Ordner "Controller " und dann auf "Hinzufügen" und dann auf "Controller".
Klicken Sie im Dialogfeld "Gerüst hinzufügen" auf "MVC 5 Controller mit Ansichten, unter Verwendung von Entity Framework" und klicken Sie dann auf "Hinzufügen".
Wählen Sie Movie (MvcMovie.Models) für die Modell-Klasse aus.
Wählen Sie MovieDBContext (MvcMovie.Models) für die Data-Kontextklasse aus.
Geben Sie für den Controllernamen "MoviesController" ein.
Die folgende Abbildung zeigt das fertige Dialogfeld.
Klicken Sie auf Hinzufügen. (Wenn sie einen Fehler erhalten, haben Sie die Anwendung wahrscheinlich nicht erstellt, bevor Sie mit dem Hinzufügen des Controllers beginnen.) Visual Studio erstellt die folgenden Dateien und Ordner:
- Eine MoviesController.cs Datei im Ordner "Controller" .
- Ein Ordner "Ansichten\Filme ".
- Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml und Index.cshtml im neuen Ordner Views\Movies.
Visual Studio hat automatisch die CRUD (Create, Read, Update, Delete)-Aktionsmethoden und Ansichten für Sie erstellt. Diese automatische Erstellung von CRUD-Aktionsmethoden und Ansichten wird als Scaffolding bezeichnet. Sie verfügen jetzt über eine voll funktionsfähige Webanwendung, mit der Sie Filmeinträge erstellen, auflisten, bearbeiten und löschen können.
Führen Sie die Anwendung aus, und klicken Sie auf den MVC-Filmlink (oder navigieren Sie zum Movies Controller, indem Sie /Movies an die URL in der Adressleiste Ihres Browsers anfügen). Da die Anwendung auf das Standardrouting (definiert in der Datei App_Start\RouteConfig.cs ) basiert, wird die Browseranforderung http://localhost:xxxxx/Movies an die Standardaktionsmethode Index des Movies Controllers weitergeleitet. Mit anderen Worten, die Browseranforderung http://localhost:xxxxx/Movies ist effektiv mit der Browseranforderung http://localhost:xxxxx/Movies/Indexidentisch. Das Ergebnis ist eine leere Liste von Filmen, da Sie noch keine hinzugefügt haben.
Erstellen eines Films
Klicken Sie auf den Link Neu erstellen. Geben Sie einige Details zu einem Film ein, und klicken Sie dann auf die Schaltfläche "Erstellen ".
Hinweis
Möglicherweise können Sie im Feld "Preis" keine Dezimalkomma oder Kommas eingeben. Um die jQuery-Validierung für nicht-englische Gebietsschemas zu unterstützen, die ein Komma (",") als Dezimalpunkt und nicht US-englische Datumsformate verwenden, müssen Sie globalize.js und das spezifische Kulturen/globalize.cultures.js-Dateiformat (aus https://github.com/jquery/globalize) sowie die notwendigen JavaScript-Bibliotheken einbinden. Ich werde das im nächsten Tutorial zeigen. Geben Sie vorerst nur ganze Zahlen wie 10 ein.
Wenn Sie auf die Schaltfläche "Erstellen " klicken, wird das Formular auf dem Server gepostet, auf dem die Filminformationen in der Datenbank gespeichert werden. Sie werden dann zur URL "/Movies " umgeleitet, wo der neu erstellte Film im Eintrag angezeigt wird.
Erstellen Sie ein paar weitere Filmeinträge. Testen Sie die Links Edit (Bearbeiten), Details und Delete (Löschen), die alle funktionsbereit sind.
Untersuchen des generierten Codes
Öffnen Sie die Datei "Controllers\MoviesController.cs ", und überprüfen Sie die generierte Index Methode. Unten sehen Sie einen Teil des Filmcontrollers mit der Index Methode.
public class MoviesController : Controller
{
private MovieDBContext db = new MovieDBContext();
// GET: /Movies/
public ActionResult Index()
{
return View(db.Movies.ToList());
}
Eine Anforderung an den Movies Controller gibt alle Einträge in der Movies Tabelle zurück und übergibt dann die Ergebnisse an die Index Ansicht. In der folgenden Zeile aus der MoviesController Klasse wird ein Filmdatenbankkontext instanziiert, wie zuvor beschrieben. Sie können den Filmdatenbankkontext verwenden, um Filme abzufragen, zu bearbeiten und zu löschen.
private MovieDBContext db = new MovieDBContext();
Stark typierte Modelle und das @model Schlüsselwort
Weiter oben in diesem Lernprogramm haben Sie gesehen, wie ein Controller Daten oder Objekte mithilfe des ViewBag Objekts an eine Ansichtsvorlage übergeben kann. Dies ViewBag ist ein dynamisches Objekt, das eine bequeme Möglichkeit bietet, Informationen spät an eine View zu übergeben.
MVC bietet auch die Möglichkeit, stark typisierte Objekte an ein Ansichtstemplate zu übergeben. Dieser stark typierte Ansatz ermöglicht eine bessere Kompilierungszeitüberprüfung ihres Codes und umfangreicherer IntelliSense im Visual Studio-Editor. Der Gerüstmechanismus in Visual Studio hat diesen Ansatz (d. h. das Übergeben eines stark typierten Modells) mit den MoviesController Klassen- und Ansichtsvorlagen verwendet, wenn sie die Methoden und Ansichten erstellt hat.
Überprüfen Sie in der Datei "Controller\MoviesController.cs " die generierte Details Methode. Die Details Methode wird unten gezeigt.
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
Der id Parameter wird in der Regel als Routendaten übergeben, z. B. wird der Controller auf den Filmcontroller, die Aktion auf details und id auf 1 gesetzt. Sie können die ID auch wie folgt mit einer Abfragezeichenfolge übergeben:
http://localhost:1234/movies/details?id=1
Wenn ein Movie Objekt gefunden wird, wird eine Instanz des Movie Modells an die Details Ansicht übergeben:
return View(movie);
Überprüfen Sie den Inhalt der Datei "Views\Movies\Details.cshtml ":
@model MvcMovie.Models.Movie
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<div>
<h4>Movie</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Title)
</dt>
@*Markup omitted for clarity.*@
</dl>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.ID }) |
@Html.ActionLink("Back to List", "Index")
</p>
Indem Sie oben in der Ansichtsvorlagendatei eine @model Anweisung einfügen, können Sie den Objekttyp angeben, den die Ansicht erwartet. Beim Erstellen des „Movies“-Controllers hat Visual Studio automatisch die folgende @model-Anweisung am Anfang der Datei Details.cshtml hinzugefügt:
@model MvcMovie.Models.Movie
Diese @model-Direktive ermöglicht Ihnen den Zugriff auf den Film, den der Controller an die Ansicht übergeben hat, indem ein stark typisiertes Model-Objekt verwendet wird. Beispielsweise übergibt der Code in der Vorlage "Details.cshtml" jedes Filmfeld an die DisplayNameFor html-Hilfsprogramme "DisplayFor" mit dem stark typierten Model Objekt. Die Create- und Edit-Methoden und -Ansichtsvorlagen übergeben auch ein Filmmodellobjekt.
Überprüfen Sie die Index.cshtml-Ansichtsvorlage und die Index Methode in der MoviesController.cs Datei. Beachten Sie, wie der Code ein List Objekt erstellt, wenn es die View Hilfsmethode in der Index Aktionsmethode aufruft. Anschließend übergibt der Code diese Movies Liste aus der Index Aktionsmethode an die Ansicht:
public ActionResult Index()
{
return View(db.Movies.ToList());
}
Wenn Sie den Filmcontroller erstellt haben, enthielt Visual Studio automatisch die folgende @model Anweisung oben in der Datei Index.cshtml :
@model IEnumerable<MvcMovie.Models.Movie>
Mit dieser @model Direktive können Sie auf die vom Controller an die Ansicht übergebene Liste der Filme zugreifen, indem Sie ein Model stark typisiertes Objekt verwenden. Beispielsweise durchläuft der Code in der Vorlage Index.cshtml, die Filme, indem es eine foreach-Anweisung über das stark typisierte Model-Objekt ausführt.
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<th>
@Html.DisplayFor(modelItem => item.Rating)
</th>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
Da das Model-Objekt stark typisiert ist (als IEnumerable<Movie>-Objekt), wird jedes item-Objekt in der Schleife vom Typ Movie geschrieben. Dies bedeutet unter anderem, dass Sie die Kompilierungszeitüberprüfung des Codes und die vollständige IntelliSense-Unterstützung im Code-Editor erhalten:
Arbeiten mit SQL Server LocalDB
Entity Framework Code First hat festgestellt, dass die Datenbank Verbindungszeichenfolge, die bereitgestellt wurde, auf eine Movies Datenbank verweist, die noch nicht vorhanden war, sodass Code Zuerst die Datenbank automatisch erstellt hat. Sie können überprüfen, ob sie erstellt wurde, indem Sie im Ordner App_Data suchen. Wenn die Movies.mdf Datei nicht angezeigt wird, klicken Sie auf der Symbolleiste Projektmappen-Explorer auf die Schaltfläche "Alle Dateien anzeigen", klicken Sie auf die Schaltfläche "Aktualisieren", und erweitern Sie dann den Ordner "App_Data".
Doppelklicken Sie auf Movies.mdf , um SERVER EXPLORER zu öffnen, und erweitern Sie dann den Ordner "Tabellen ", um die Tabelle "Filme" anzuzeigen. Notieren Sie sich das Schlüsselsymbol neben der ID. Standardmäßig wird von EF eine Eigenschaft mit dem Namen "ID" als Primärschlüssel festgelegt. Weitere Informationen zu EF und MVC finden Sie im hervorragenden Lernprogramm von Tom Dykstra zu MVC und EF.
Klicken Sie mit der rechten Maustaste auf die Movies Tabelle, und wählen Sie " Tabellendaten anzeigen" aus, um die von Ihnen erstellten Daten anzuzeigen.
Klicken Sie mit der rechten Maustaste auf die Movies Tabelle, und wählen Sie " Tabellendefinition öffnen" aus, um die Tabellenstruktur anzuzeigen, die Entity Framework Code First für Sie erstellt hat.
Beachten Sie, wie das Schema der Movies Tabelle der Movie zuvor erstellten Klasse zugeordnet ist. Entity Framework Code First hat dieses Schema automatisch für Sie anhand Ihrer Movie-Klasse erstellt.
Wenn Sie fertig sind, schließen Sie die Verbindung, indem Sie mit der rechten Maustaste auf MovieDBContext klicken und "Verbindung schließen" auswählen. (Wenn Sie die Verbindung nicht schließen, wird möglicherweise beim nächsten Ausführen des Projekts ein Fehler angezeigt).
Sie verfügen jetzt über eine Datenbank und Seiten zum Anzeigen, Bearbeiten, Aktualisieren und Löschen von Daten. Im nächsten Lernprogramm untersuchen wir den Rest des Gerüstcodes und fügen eine SearchIndex Methode und eine SearchIndex Ansicht hinzu, mit der Sie in dieser Datenbank nach Filmen suchen können. Weitere Informationen zur Verwendung von Entity Framework mit MVC finden Sie unter Erstellen eines Entity Framework-Datenmodells für eine ASP.NET MVC-Anwendung.