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 Stephen Walther
Sie sind verwirrt über Modelle, Ansichten und Controller? In diesem Tutorial führt Sie Stephen Walther in die verschiedenen Teile einer ASP.NET MVC-Anwendung ein.
In diesem Tutorial erhalten Sie eine allgemeine Übersicht über ASP.NET MVC-Modelle, -Ansichten und -Controller. Anders ausgedrückt: M', V' und C' werden in ASP.NET MVC erläutert.
Nachdem Sie dieses Tutorial gelesen haben, sollten Sie verstehen, wie die verschiedenen Teile einer ASP.NET MVC-Anwendung zusammenarbeiten. Sie sollten auch wissen, wie sich die Architektur einer ASP.NET MVC-Anwendung von einer ASP.NET Web Forms- oder Active Server Pages-Anwendung unterscheidet.
Beispiel ASP.NET MVC-Anwendung
Die Visual Studio-Standardvorlage zum Erstellen ASP.NET MVC-Webanwendungen enthält eine extrem einfache Beispielanwendung, die verwendet werden kann, um die verschiedenen Teile einer ASP.NET MVC-Anwendung zu verstehen. In diesem Tutorial nutzen wir diese einfache Anwendung.
Sie erstellen eine neue ASP.NET MVC-Anwendung mit der MVC-Vorlage, indem Sie Visual Studio 2008 starten und die Menüoption Datei, Neues Projekt auswählen (siehe Abbildung 1). Wählen Sie im Dialogfeld Neues Projekt unter Projekttypen (Visual Basic oder C#) Ihre bevorzugte Programmiersprache aus, und wählen Sie unter Vorlagen ASP.NET MVC-Webanwendung aus. Klicken Sie auf die Schaltfläche "OK".
Abbildung 01: Dialogfeld "Neues Projekt" (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Wenn Sie eine neue ASP.NET MVC-Anwendung erstellen, wird das Dialogfeld Komponententestprojekt erstellen angezeigt (siehe Abbildung 2). In diesem Dialogfeld können Sie ein separates Projekt in Ihrer Projektmappe erstellen, um Ihre ASP.NET MVC-Anwendung zu testen. Wählen Sie die Option Nein, erstellen Sie kein Komponententestprojekt, und klicken Sie auf die Schaltfläche OK .
Abbildung 02: Dialogfeld "Komponententest erstellen" (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Nachdem die neue ASP.NET MVC-Anwendung erstellt wurde. Im fenster Projektmappen-Explorer werden mehrere Ordner und Dateien angezeigt. Insbesondere werden drei Ordner mit dem Namen Modelle, Ansichten und Controller angezeigt. Wie Sie anhand der Ordnernamen erraten können, enthalten diese Ordner die Dateien zum Implementieren von Modellen, Ansichten und Controllern.
Wenn Sie den Ordner Controller erweitern, sollten eine Datei mit dem Namen AccountController.vb und eine Datei mit dem Namen HomeController.vb angezeigt werden. Wenn Sie den Ordner Ansichten erweitern, sollten drei Unterordner namens Account, Home und Shared angezeigt werden. Wenn Sie den Ordner Start erweitern, werden zwei zusätzliche Dateien namens About.aspx und Index.aspx angezeigt (siehe Abbildung 3). Diese Dateien bilden die Beispielanwendung, die in der Standardvorlage ASP.NET MVC enthalten ist.
Abbildung 03: Fenster Projektmappen-Explorer (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Sie können die Beispielanwendung ausführen, indem Sie die Menüoption Debuggen, Debuggen starten auswählen. Alternativ können Sie die Taste F5 drücken.
Wenn Sie zum ersten Mal eine ASP.NET-Anwendung ausführen, wird das Dialogfeld in Abbildung 4 angezeigt, in dem empfohlen wird, den Debugmodus zu aktivieren. Klicken Sie auf die Schaltfläche OK, und die Anwendung wird ausgeführt.
Abbildung 04: Dialogfeld "Debuggen nicht aktiviert" (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Wenn Sie eine ASP.NET MVC-Anwendung ausführen, startet Visual Studio die Anwendung in Ihrem Webbrowser. Die Beispielanwendung besteht aus nur zwei Seiten: der Seite Index und der Seite Info. Wenn die Anwendung zum ersten Mal gestartet wird, wird die Seite Index angezeigt (siehe Abbildung 5). Sie können zur Seite Info navigieren, indem Sie oben rechts in der Anwendung auf den Menülink klicken.
Abbildung 05: Die Indexseite (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Beachten Sie die URLs in der Adressleiste Ihres Browsers. Wenn Sie beispielsweise auf den Menülink Info klicken, ändert sich die URL in der Adressleiste des Browsers in /Home/Info.
Wenn Sie das Browserfenster schließen und zu Visual Studio zurückkehren, können Sie keine Datei mit dem Pfad Home/About finden. Die Dateien sind nicht vorhanden. Wie ist das möglich?
Eine URL ist nicht gleich einer Seite.
Wenn Sie eine herkömmliche ASP.NET Web Forms-Anwendung oder eine Active Server Pages-Anwendung erstellen, besteht eine 1:1-Korrespondenz zwischen einer URL und einer Seite. Wenn Sie eine Seite mit dem Namen SomePage.aspx vom Server anfordern, sollte eine Seite mit dem Namen SomePage.aspx auf dem Datenträger vorhanden sein. Wenn die Datei SomePage.aspx nicht vorhanden ist, erhalten Sie einen hässlichen Fehler 404 – Seite nicht gefunden .
Beim Erstellen einer ASP.NET MVC-Anwendung hingegen besteht keine Übereinstimmung zwischen der URL, die Sie in die Adressleiste Ihres Browsers eingeben, und den Dateien, die Sie in Ihrer Anwendung finden. In einer ASP.NET MVC-Anwendung entspricht eine URL einer Controlleraktion und nicht einer Seite auf dem Datenträger.
In einer herkömmlichen ASP.NET- oder ASP-Anwendung werden Browseranforderungen Seiten zugeordnet. In einer ASP.NET MVC-Anwendung werden Browseranforderungen dagegen Controlleraktionen zugeordnet. Eine ASP.NET Web Forms Anwendung ist inhaltsorientiert. Eine ASP.NET MVC-Anwendung ist dagegen anwendungslogikzentriert.
Grundlegendes zu ASP.NET Routing
Eine Browseranforderung wird einer Controlleraktion über ein Feature des ASP.NET Frameworks namens ASP.NET Routing zugeordnet. ASP.NET Routing wird vom ASP.NET MVC-Framework verwendet, um eingehende Anforderungen an Controlleraktionen weiterzuleiten .
ASP.NET Routing verwendet eine Routingtabelle, um eingehende Anforderungen zu verarbeiten. Diese Routingtabelle wird erstellt, wenn Ihre Webanwendung zum ersten Mal gestartet wird. Die Routingtabelle wird in der Datei Global.asax eingerichtet. Die Standarddatei "MVC Global.asax" ist in Listing 1 enthalten.
Auflistung 1 : Global.asax
' Note: For instructions on enabling IIS6 or IIS7 classic mode,
' visit https://go.microsoft.com/?LinkId=9394802
Public Class MvcApplication
Inherits System.Web.HttpApplication
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = ""} _
)
End Sub
Sub Application_Start()
RegisterRoutes(RouteTable.Routes)
End Sub
End Class
Wenn eine ASP.NET Anwendung zum ersten Mal gestartet wird, wird die Application_Start()-Methode aufgerufen. In Listing 1 ruft diese Methode die RegisterRoutes()-Methode auf, und die RegisterRoutes()-Methode erstellt die Standardroutentabelle.
Die Standardroutentabelle besteht aus einer Route. Diese Standardroute unterbricht alle eingehenden Anforderungen in drei Segmente (ein URL-Segment ist alles zwischen schrägen Schrägstrichen). Das erste Segment wird einem Controllernamen zugeordnet, das zweite Segment einem Aktionsnamen und das letzte Segment einem Parameter zugeordnet, der an die Aktion mit dem Namen ID übergeben wird.
Nehmen wir beispielsweise die folgende URL:
/Product/Details/3
Diese URL wird wie folgt in drei Parameter analysiert:
Controller = Produkt
Aktion = Details
ID = 3
Die in der Datei Global.asax definierte Standardroute enthält Standardwerte für alle drei Parameter. Der Standardcontroller ist Home, die Standardaktion ist Index, und die Standard-ID ist eine leere Zeichenfolge. Berücksichtigen Sie unter Berücksichtigung dieser Standardwerte, wie die folgende URL analysiert wird:
/Employee
Diese URL wird wie folgt in drei Parameter analysiert:
Controller = Mitarbeiter
Aktion = Index
ID =
Wenn Sie schließlich eine ASP.NET MVC-Anwendung öffnen, ohne eine URL (z. B. ) anzugeben, http://localhost
wird die URL wie folgt analysiert:
Controller = Start
Aktion = Index
ID =
Die Anforderung wird an die Index()-Aktion für die HomeController-Klasse weitergeleitet.
Grundlegendes zu Controllern
Ein Controller ist dafür verantwortlich, die Art und Weise zu steuern, wie ein Benutzer mit einer MVC-Anwendung interagiert. Ein Controller enthält die Ablaufsteuerungslogik für eine ASP.NET MVC-Anwendung. Ein Controller bestimmt, welche Antwort an einen Benutzer zurück gesendet werden soll, wenn ein Benutzer eine Browseranforderung stellt.
Ein Controller ist nur eine Klasse (z. B. eine Visual Basic- oder C#-Klasse). Das Beispiel ASP.NET MVC-Anwendung enthält einen Controller namens HomeController.vb im Ordner Controllers. Der Inhalt der Datei "HomeController.vb" wird in Listing 2 reproduziert.
Eintrag 2 : HomeController.cs
<HandleError()> _
Public Class HomeController
Inherits System.Web.Mvc.Controller
Function Index()
ViewData("Title") = "Home Page"
ViewData("Message") = "Welcome to ASP.NET MVC!"
Return View()
End Function
Function About()
ViewData("Title") = "About Page"
Return View()
End Function
End Class
Beachten Sie, dass der HomeController über zwei Methoden namens Index() und About() verfügt. Diese beiden Methoden entsprechen den beiden Aktionen, die vom Controller verfügbar gemacht werden. Die URL /Home/Index ruft die HomeController.Index()-Methode auf, und die URL /Home/About ruft die HomeController.About()-Methode auf.
Jede öffentliche Methode in einem Controller wird als Controlleraktion verfügbar gemacht. Sie müssen vorsichtig sein. Dies bedeutet, dass jede öffentliche Methode, die in einem Controller enthalten ist, von jedem aufgerufen werden kann, der Zugriff auf das Internet hat, indem die richtige URL in einen Browser eingegeben wird.
Grundlegendes zu Sichten
Die beiden Controlleraktionen, die von der HomeController-Klasse verfügbar gemacht werden, Index() und About(), geben beide eine Ansicht zurück. Eine Ansicht enthält das HTML-Markup und den Inhalt, der an den Browser gesendet wird. Eine Ansicht entspricht einer Seite, wenn Sie mit einer ASP.NET MVC-Anwendung arbeiten.
Sie müssen Ihre Ansichten am richtigen Ort erstellen. Die Aktion HomeController.Index() gibt eine Ansicht im folgenden Pfad zurück:
\Views\Home\Index.aspx
Die Aktion HomeController.About() gibt eine Ansicht im folgenden Pfad zurück:
\Views\Home\About.aspx
Wenn Sie im Allgemeinen eine Ansicht für eine Controlleraktion zurückgeben möchten, müssen Sie im Ordner Views einen Unterordner mit demselben Namen wie Ihr Controller erstellen. Innerhalb des Unterordners müssen Sie eine ASPX-Datei mit demselben Namen wie die Controlleraktion erstellen.
Die Datei in Listing 3 enthält die Ansicht About.aspx.
Eintrag 3 : About.aspx
<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
<h2>About</h2>
<p>
Put content here.
</p>
</asp:Content>
Wenn Sie die erste Zeile in Listing 3 ignorieren, besteht der Großteil der restlichen Ansicht aus Standard-HTML. Sie können den Inhalt der Ansicht ändern, indem Sie hier einen beliebigen HTML-Code eingeben.
Eine Ansicht ähnelt einer Seite in Active Server Pages oder ASP.NET Web Forms. Eine Ansicht kann HTML-Inhalt und Skripts enthalten. Sie können die Skripts in Ihrer bevorzugten .NET-Programmiersprache schreiben (z. B. C# oder Visual Basic .NET). Sie verwenden Skripts, um dynamische Inhalte wie Datenbankdaten anzuzeigen.
Grundlegendes zu Modellen
Wir haben controller besprochen und Ansichten diskutiert. Das letzte Thema, das wir besprechen müssen, ist Modelle. Was ist ein MVC-Modell?
Ein MVC-Modell enthält ihre gesamte Anwendungslogik, die nicht in einer Ansicht oder einem Controller enthalten ist. Das Modell sollte ihre gesamte Anwendungsgeschäftslogik, Validierungslogik und Datenbankzugriffslogik enthalten. Wenn Sie beispielsweise das Microsoft Entity Framework für den Zugriff auf Ihre Datenbank verwenden, erstellen Sie Ihre Entity Framework-Klassen (Ihre EDMX-Datei) im Ordner Models.
Eine Ansicht sollte nur Logik enthalten, die sich auf das Generieren der Benutzeroberfläche bezieht. Ein Controller sollte nur das Mindestmaß an Logik enthalten, die erforderlich ist, um die richtige Ansicht zurückzugeben oder den Benutzer an eine andere Aktion (Flusssteuerung) umzuleiten. Alles andere sollte im Modell enthalten sein.
Im Allgemeinen sollten Sie nach Fettmodellen und mageren Controllern streben. Ihre Controllermethoden sollten nur wenige Codezeilen enthalten. Wenn eine Controlleraktion zu fett wird, sollten Sie erwägen, die Logik in eine neue Klasse im Ordner Models zu verschieben.
Zusammenfassung
In diesem Tutorial erhalten Sie eine allgemeine Übersicht über die verschiedenen Teile einer ASP.NET MVC-Webanwendung. Sie haben gelernt, wie ASP.NET Routing eingehende Browseranforderungen bestimmten Controlleraktionen zuordnet. Sie haben gelernt, wie Controller orchestrieren, wie Ansichten an den Browser zurückgegeben werden. Schließlich haben Sie gelernt, wie Modelle Anwendungsgeschäfts-, Validierungs- und Datenbankzugriffslogik enthalten.