Freigeben über


Zugreifen auf Modelldaten anhand eines Controllers (C#)

von Rick Anderson

Hinweis

Hier ist eine aktualisierte Version dieses Lernprogramms verfügbar, die ASP.NET MVC 5 und Visual Studio 2013 verwendet. Es ist sicherer, viel einfacher zu folgen und zeigt weitere Features.

In diesem Lernprogramm lernen Sie die Grundlagen zum Erstellen einer ASP.NET MVC-Webanwendung mithilfe von Microsoft Visual Web Developer 2010 Express Service Pack 1, einer kostenlosen Version von Microsoft Visual Studio. Bevor Sie beginnen, stellen Sie sicher, dass Sie die unten aufgeführten Voraussetzungen installiert haben. Sie können alle installieren, indem Sie auf den folgenden Link klicken: Web Platform Installer. Alternativ können Sie die erforderlichen Komponenten mit den folgenden Links einzeln installieren:

Wenn Sie Visual Studio 2010 anstelle von Visual Web Developer 2010 verwenden, installieren Sie die erforderlichen Komponenten, indem Sie auf den folgenden Link klicken: Visual Studio 2010-Voraussetzungen.

Für dieses Thema steht ein Visual Web Developer-Projekt mit C#-Quellcode zur Verfügung. Laden Sie die C#-Version herunter. Wenn Sie Visual Basic bevorzugen, wechseln Sie zu der Visual Basic-Version dieses Lernprogramms.

In diesem Abschnitt erstellen Sie eine neue MoviesController Klasse und schreiben Code, der die Filmdaten abruft und im Browser mithilfe einer Ansichtsvorlage anzeigt. Achten Sie darauf, ihre Anwendung zu erstellen, bevor Sie fortfahren.

Klicken Sie mit der rechten Maustaste auf den Ordner " Controller ", und erstellen Sie einen neuen MoviesController Controller. Wählen Sie die folgenden Optionen:

  • Controllername: MoviesController. (Dies ist die Standardeinstellung.)
  • Vorlage: Controller mit Lese-/Schreibaktionen und Ansichten mithilfe von Entity Framework.
  • Modellklasse: Movie (MvcMovie.Models).
  • Datenkontextklasse: MovieDBContext (MvcMovie.Models).
  • Ansichten: Razor (CSHTML). (Der Standardwert.)

AddScaffoldedMovieController

Klicken Sie auf Hinzufügen. Visual Web Developer erstellt die folgenden Dateien und Ordner:

  • Eine MoviesController.cs Datei im Ordner "Controller" des Projekts.
  • Ein Ordner "Filme" im Ordner "Ansichten" des Projekts.
  • Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml und Index.cshtml im neuen Ordner Views\Movies.

NewMovieControllerScreenShot

Der ASP.NET MVC 3-Gerüstmechanismus erstellt automatisch die CRUD-Aktionsmethoden (Erstellen, Lesen, Aktualisieren und Löschen) und Ansichten für Sie. 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 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 "Global.asax ") 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 des Browserfensters

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 des Browserfensters

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.

IndexWhenHarryMet

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 ViewResult Index()
    {
        return View(db.Movies.ToList());
    }

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();

Eine Anforderung an den Movies Controller gibt alle Einträge in der Movies Tabelle der Filmdatenbank zurück und übergibt dann die Ergebnisse an die Index Ansicht.

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 späte Möglichkeit zum Übergeben von Informationen an eine Ansicht bietet.

ASP.NET MVC bietet auch die Möglichkeit, stark typierte Daten oder Objekte an eine Ansichtsvorlage zu übergeben. Dieser stark typierte Ansatz ermöglicht eine bessere Kompilierungszeitüberprüfung ihres Codes und umfangreicherer IntelliSense im Visual Web Developer-Editor. Wir verwenden diesen Ansatz mit der Ansichtsvorlage "Class" und "MoviesControllerIndex.cshtml".

Beachten Sie, wie der Code ein List Objekt erstellt, wenn es die View Hilfsmethode in der Index Aktionsmethode aufruft. Der Code übergibt dann diese Movies Liste vom Controller an die Ansicht:

public ViewResult Index()
{
    return View(db.Movies.ToList());
}

Indem Sie oben in der Ansichtsvorlagendatei eine @model Anweisung einfügen, können Sie den Objekttyp angeben, den die Ansicht erwartet. Wenn Sie den Filmcontroller erstellt haben, enthielt Visual Web Developer 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 Liste der Filme zugreifen, die der Controller mithilfe eines Model stark typierten Objekts an die Ansicht übergeben hat. Beispielsweise durchläuft der Code in der Vorlage Index.cshtml die Filme durch eine foreach Anweisung über das stark typierte Model Objekt:

@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>
        <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 typiert ist (als IEnumerable<Movie> Objekt), wird jedes item Objekt in der Schleife als MovieTyp eingegeben. 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 Compact

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 Datei "Movies.sdf" 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".

SDF_in_SolnExp

Doppelklicken Sie auf Movies.sdf, um den Server-Explorer zu öffnen. Erweitern Sie dann den Ordner "Tabellen ", um die Tabellen anzuzeigen, die in der Datenbank erstellt wurden.

Hinweis

Wenn beim Doppelklicken auf "Movies.sdf" eine Fehlermeldung angezeigt wird, stellen Sie sicher, dass Sie SQL Server Compact 4.0 (Runtime + Tools-Unterstützung) installiert haben. (Links zur Software finden Sie in der Liste der Voraussetzungen in Teil 1 dieser Lernprogrammreihe.) Wenn Sie die Version jetzt installieren, müssen Sie Visual Web Developer schließen und erneut öffnen.

DB_explorer

Es gibt zwei Tabellen, eine für den Movie Entitätssatz und dann die EdmMetadata Tabelle. Die EdmMetadata Tabelle wird vom Entity Framework verwendet, um zu bestimmen, wann das Modell und die Datenbank nicht synchronisiert sind.

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

MoviesTable

Klicken Sie mit der rechten Maustaste auf die Movies Tabelle, und wählen Sie "Tabellenschema bearbeiten" aus.

EditTableSchema

TableSchemaSM

Beachten Sie, wie das Schema der Movies Tabelle der Movie zuvor erstellten Klasse zugeordnet ist. Entity Framework Code First created this schema for you based on your Movie class.

Wenn Sie fertig sind, schließen Sie die Verbindung. (Wenn Sie die Verbindung nicht schließen, wird möglicherweise beim nächsten Ausführen des Projekts ein Fehler angezeigt).

CloseConnection

Sie verfügen jetzt über die Datenbank und eine einfache Eintragsseite, um Inhalte davon anzuzeigen. 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.