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
Verwirrt über Modelle, Ansichten und Controller? In diesem Tutorial führt Stephen Walther Sie 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. Mit anderen Worten, es erklärt die M', V' und C' in ASP.NET MVC.
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 vollständige Bild anzuzeigen)
Nachdem die neue ASP.NET MVC-Anwendung erstellt wurde. Im fenster Projektmappen-Explorer werden mehrere Ordner und Dateien angezeigt. Insbesondere sehen Sie drei Ordner mit dem Namen Modelle, Ansichten und Controller. 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 Die Datei AccountController.cs und die Datei HomeController.cs angezeigt werden. Wenn Sie den Ordner Ansichten erweitern, sollten drei Unterordner mit den Namen 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: Das Projektmappen-Explorer-Fensters (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 nur aus 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 Browser-Adressleiste in /Home/About.
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 entspricht nicht 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 auf dem Datenträger besser eine Seite namens SomePage.aspx 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 gibt es dagegen keine Korrespondenz 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 anstelle 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 MVC Global.asax-Standarddatei ist in Listing 1 enthalten.
Eintrag 1 – Global.asax
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit https://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
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 unterteilt 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 id übergeben wird.
Nehmen wir beispielsweise die folgende URL:
/Product/Details/3
Diese URL wird in drei Parameter wie diesen 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 diese Standardwerte, wie die folgende URL analysiert wird:
/Employee
Diese URL wird in drei Parameter wie diesen 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 für die Steuerung der Interaktion eines Benutzers mit einer MVC-Anwendung verantwortlich. 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.cs im Ordner Controller. Der Inhalt der Datei "HomeController.cs" wird in Listing 2 reproduziert.
Eintrag 2 : HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Title"] = "Home Page";
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About()
{
ViewData["Title"] = "About Page";
return View();
}
}
}
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 und die URL /Home/About die HomeController.About()-Methode auf.
Jede öffentliche Methode in einem Controller wird als Controlleraktion verfügbar gemacht. Da müssen Sie 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 an der richtigen Stelle 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 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. Im Unterordner müssen Sie eine ASPX-Datei mit demselben Namen wie die Controlleraktion erstellen.
Die Datei in Listing 3 enthält die About.aspx-Ansicht.
Eintrag 3 : About.aspx
<%@ Page Language="C#" 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 größte Teil der restlichen Ansicht aus Standard-HTML. Sie können den Inhalt der Ansicht ändern, indem Sie einen beliebigen HTML-Code eingeben, den Sie hier benötigen.
Eine Ansicht ähnelt einer Seite in Active Server Pages oder ASP.NET Web Forms. Eine Ansicht kann HTML-Inhalte 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 diskutiert und Ansichten diskutiert. Das letzte Thema, das wir diskutieren müssen, sind 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 Geschäftslogik, Validierungslogik und Datenbankzugriffslogik enthalten. Wenn Sie beispielsweise 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 minimum an Logik enthalten, die erforderlich ist, um die richtige Ansicht zurückzugeben oder den Benutzer zu einer anderen Aktion (Flusssteuerung) umzuleiten. Alles andere sollte im Modell enthalten sein.
Im Allgemeinen sollten Sie nach Fettmodellen und dünnen Controllern streben. Ihre Controllermethoden sollten nur wenige Codezeilen enthalten. Wenn eine Controlleraktion zu fett wird, sollten Sie die Logik in eine neue Klasse im Ordner Models 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.