Freigeben über


ASP.NET MVC-Controller – Übersicht (C#)

von Stephen Walther

In diesem Tutorial stellt Ihnen Stephen Walther ASP.NET MVC-Controller vor. Sie erfahren, wie Sie neue Controller erstellen und verschiedene Arten von Aktionsergebnissen zurückgeben.

In diesem Tutorial wird das Thema ASP.NET MVC-Controller, Controlleraktionen und Aktionsergebnisse erläutert. Nachdem Sie dieses Tutorial abgeschlossen haben, erfahren Sie, wie Controller verwendet werden, um zu steuern, wie ein Besucher mit einer ASP.NET MVC-Website interagiert.

Grundlegendes zu Controllern

MVC-Controller sind für die Reaktion auf Anforderungen verantwortlich, die an eine ASP.NET MVC-Website gestellt werden. Jede Browseranforderung wird einem bestimmten Controller zugeordnet. Angenommen, Sie geben die folgende URL in die Adressleiste Ihres Browsers ein:

http://localhost/Product/Index/3

In diesem Fall wird ein Controller namens ProductController aufgerufen. Der ProductController ist für das Generieren der Antwort auf die Browseranforderung verantwortlich. Beispielsweise kann der Controller eine bestimmte Ansicht an den Browser zurückgeben, oder der Controller leitet den Benutzer an einen anderen Controller um.

Listing 1 enthält einen einfachen Controller namens ProductController.

Listing1 – Controllers\ProductController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace MvcApplication1.Controllers
{
    public class ProductController : Controller
    {
        //
        // GET: /Products/

        public ActionResult Index()
        {
            // Add action logic here
            return View();
        }
    }
}

Wie Sie in Listing 1 sehen können, ist ein Controller nur eine Klasse (eine Visual Basic .NET- oder C#-Klasse). Ein Controller ist eine Klasse, die von der System.Web.Mvc.Controller-Basisklasse abgeleitet wird. Da ein Controller von dieser Basisklasse erbt, erbt ein Controller mehrere nützliche Methoden kostenlos (Wir besprechen diese Methoden in einem Moment).

Grundlegendes zu Controlleraktionen

Ein Controller macht Controlleraktionen verfügbar. Eine Aktion ist eine Methode auf einem Controller, die aufgerufen wird, wenn Sie eine bestimmte URL in die Adressleiste Ihres Browsers eingeben. Angenommen, Sie stellen sich eine Anforderung für die folgende URL vor:

http://localhost/Product/Index/3

In diesem Fall wird die Index()-Methode für die ProductController-Klasse aufgerufen. Die Index()-Methode ist ein Beispiel für eine Controlleraktion.

Eine Controlleraktion muss eine öffentliche Methode einer Controllerklasse sein. C#-Methoden sind standardmäßig private Methoden. Beachten Sie, dass jede öffentliche Methode, die Sie einer Controllerklasse hinzufügen, automatisch als Controlleraktion verfügbar gemacht wird (Sie müssen dabei vorsichtig sein, da eine Controlleraktion von jedem im Universum aufgerufen werden kann, indem sie einfach die richtige URL in eine Browseradressleiste eingeben).

Es gibt einige zusätzliche Anforderungen, die von einer Controlleraktion erfüllt werden müssen. Eine Methode, die als Controlleraktion verwendet wird, kann nicht überladen werden. Darüber hinaus kann eine Controlleraktion keine statische Methode sein. Abgesehen davon können Sie so gut wie jede Methode als Controlleraktion verwenden.

Grundlegendes zu Aktionsergebnissen

Eine Controlleraktion gibt ein so genanntes Aktionsergebnis zurück. Ein Aktionsergebnis gibt eine Controlleraktion als Reaktion auf eine Browseranforderung zurück.

Das ASP.NET MVC-Framework unterstützt verschiedene Arten von Aktionsergebnissen, darunter:

  1. ViewResult: Stellt HTML und Markup dar.
  2. EmptyResult: Stellt kein Ergebnis dar.
  3. RedirectResult: Stellt eine Umleitung zu einer neuen URL dar.
  4. JsonResult: Stellt ein JavaScript Object Notation-Ergebnis dar, das in einer AJAX-Anwendung verwendet werden kann.
  5. JavaScriptResult: Stellt ein JavaScript-Skript dar.
  6. ContentResult: Stellt ein Textergebnis dar.
  7. FileContentResult: Stellt eine herunterladbare Datei (mit dem binären Inhalt) dar.
  8. FilePathResult: Stellt eine herunterladbare Datei (mit einem Pfad) dar.
  9. FileStreamResult: Stellt eine herunterladbare Datei (mit einem Dateidatenstrom) dar.

Alle diese Aktionsergebnisse erben von der ActionResult-Basisklasse.

In den meisten Fällen gibt eine Controlleraktion ein ViewResult zurück. Beispielsweise gibt die Indexcontrolleraktion in Listing 2 ein ViewResult zurück.

Auflistung 2: Controllers\BookController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace MvcApplication1.Controllers
{
    public class BookController : Controller
    {
        public ActionResult Index()
        {
            // Add action logic here
            return View();
        }
    }
}

Wenn eine Aktion ein ViewResult zurückgibt, wird HTML an den Browser zurückgegeben. Die Index()-Methode in Listing 2 gibt eine Ansicht namens Index an den Browser zurück.

Beachten Sie, dass die Index()-Aktion in Listing 2 kein ViewResult() zurückgibt. Stattdessen wird die View()-Methode der Controller-Basisklasse aufgerufen. Normalerweise geben Sie ein Aktionsergebnis nicht direkt zurück. Stattdessen rufen Sie eine der folgenden Methoden der Controller-Basisklasse auf:

  1. Ansicht: Gibt ein ViewResult-Aktionsergebnis zurück.
  2. Umleitung: Gibt ein RedirectResult-Aktionsergebnis zurück.
  3. RedirectToAction: Gibt ein RedirectToRouteResult-Aktionsergebnis zurück.
  4. RedirectToRoute: Gibt ein RedirectToRouteResult-Aktionsergebnis zurück.
  5. Json: Gibt ein JsonResult-Aktionsergebnis zurück.
  6. JavaScriptResult: Gibt ein JavaScriptResult zurück.
  7. Inhalt: Gibt ein ContentResult-Aktionsergebnis zurück.
  8. Datei: Gibt ein FileContentResult-, FilePathResult- oder FileStreamResult-Objekt zurück, abhängig von den Parametern, die an die -Methode übergeben werden.

Wenn Sie also eine Ansicht an den Browser zurückgeben möchten, rufen Sie die View()-Methode auf. Wenn Sie den Benutzer von einer Controlleraktion zu einer anderen umleiten möchten, rufen Sie die RedirectToAction()-Methode auf. Beispielsweise zeigt die Aktion Details() in Listing 3 entweder eine Ansicht an oder leitet den Benutzer zur Index()-Aktion um, je nachdem, ob der Id-Parameter einen Wert aufweist.

Eintrag 3: CustomerController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class CustomerController : Controller
    {
        public ActionResult Details(int? id)
        {
            if (!id.HasValue)
                return RedirectToAction("Index");

            return View();
        }

        public ActionResult Index()
        {
            return View();
        }

    }
}

Das Ergebnis der ContentResult-Aktion ist speziell. Sie können das ContentResult-Aktionsergebnis verwenden, um ein Aktionsergebnis als Nur-Text zurückzugeben. Beispielsweise gibt die Index()-Methode in Listing 4 eine Nachricht als Nur-Text und nicht als HTML zurück.

Auflistung 4: Controllers\StatusController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class StatusController : Controller
    {
        public ActionResult Index()
        {
            return Content("Hello World!");
        }
    }
}

Wenn die StatusController.Index()-Aktion aufgerufen wird, wird keine Ansicht zurückgegeben. Stattdessen wird der unformatierte Text "Hallo Welt!" an den Browser zurückgegeben.

Wenn eine Controlleraktion ein Ergebnis zurückgibt, das kein Aktionsergebnis ist , z. B. ein Datum oder eine ganze Zahl, wird das Ergebnis automatisch in ein ContentResult umschlossen. Wenn beispielsweise die Index()-Aktion des WorkControllers in Listing 5 aufgerufen wird, wird das Datum automatisch als ContentResult zurückgegeben.

Auflistung 5 : WorkController.cs

using System;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class WorkController : Controller
    {
        public DateTime Index()
        {
            return DateTime.Now;
        }
    }
}

Die Index()-Aktion in Listing 5 gibt ein DateTime-Objekt zurück. Das ASP.NET MVC-Framework konvertiert das DateTime-Objekt in eine Zeichenfolge und umschließt den DateTime-Wert automatisch in ein ContentResult. Der Browser empfängt Datum und Uhrzeit als Nur-Text.

Zusammenfassung

In diesem Tutorial wurden die Konzepte der ASP.NET MVC-Controller, Controlleraktionen und Controlleraktionsergebnisse vorgestellt. Im ersten Abschnitt haben Sie erfahren, wie Sie einem ASP.NET MVC-Projekt neue Controller hinzufügen. Als Nächstes haben Sie erfahren, wie öffentliche Methoden eines Controllers dem Universum als Controlleraktionen zur Verfügung stehen. Abschließend wurden die verschiedenen Arten von Aktionsergebnissen erläutert, die von einer Controlleraktion zurückgegeben werden können. Insbesondere wurde erläutert, wie Ein ViewResult, RedirectToActionResult und ContentResult von einer Controlleraktion zurückgegeben werden.