Freigeben über


Zugreifen auf die Daten Ihres Modells über einen neuen Controller

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".

Screenshot, das den Projektmappen-Explorer zeigt. Das Kontextmenü des Ordners

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".

Screenshot des Dialogfelds 'Gerüst hinzufügen'. Der MVC 5 Controller mit Ansichten, der das Entity Framework verwendet, ist ausgewählt.

  • 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.

Screenshot des Dialogfelds

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.

Screenshot der M V C-Filmseite mit einer leeren Indexliste.

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 ".

Screenshot der Seite

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.

Screenshot der Seite

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:

ModelIntelliSense

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".

Screenshot des Fensters

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.

DB_explorer

Klicken Sie mit der rechten Maustaste auf die Movies Tabelle, und wählen Sie " Tabellendaten anzeigen" aus, um die von Ihnen erstellten Daten anzuzeigen.

Screenshot des Fensters

Screenshot des Fensters

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.

Screenshot des Fensters

Screenshot des Fensters

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).

Screenshot des Fensters

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.