ASP.NET MVC 3 Tutorial #4-Der Controller im Detail

Von Mario Meir-Huber Autor Feed 11. April 2011 14:59

Im Tutorial #2 habe ich einige Controller-Aktionen vorgestellt, bis dato jedoch noch keinen Quellcode im Controller gezeigt. Sehen wir uns zu allererst mal den HomeController an. Hier haben wir die Methode “Index”, welche auf den gleichnamigen View verweist. Außerdem geben wir dem View noch Daten mit. Dies kann man über mehrere Möglichkeiten erreichen. In unserem Beispiel verwenden wir ViewData. In einem späteren Post werde ich noch weitere Möglichkeiten vorstellen.

public ActionResult Index()
{
    ViewData["Message"] = "Welcome to ASP.NET MVC!";

    return View();
}

Dies hat dann folgenden Output als Effekt:

image

Im Home-Controller befindet sich auch noch die Methode “About”. Hier wird ebenfalls wie in der Index-Methode “return View” angegeben. Diese Methode gibt jetzt einen View mit den Namen “About” zurück. Es ist auch möglich, andere Views anzugeben.

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

Der View “About” ist im Ordner unter “Views/Home/” zu finden.

image

Will man einen anderen Controller aufrufen – in meinem Fall den Controller “ForceController” so wird auch hier der Default Route mit Index aufgerufen. Ein Aufruf von “/Force” landet demnach auf Index.

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

image

Asp.NET MVC stellt uns jedoch auch noch wesentlich mehr Möglichkeiten zur Verfügung, Daten zurückzugeben. Bis jetzt hatten wir immer “return View()” verwendet. Es ist jedoch auch möglich, einfachen Content zurückzugeben. Dies funktioniert mit “return Content”.

public ActionResult HelloWorld()
{
    return Content("Hello World");
}

In diesem Fall wird der Content ausgegeben. Im Tutorial 2 habe ich auch auf Nullable Types als Parameter hingewiesen. Hierfür muss man dies nur in der Methode so definieren:

public ActionResult GetSomeId(int? id)
{
    if (id.HasValue)
        return Content(string.Format("Hello Number {0}", id.Value));
    else
        return Content("No value specificed");
}

Wird die Methode ohne Parameter aufgerufen, so gibt diese “No value specified” zurück. Asp.NET MVC erlaubt es uns auch, auf andere Controller/Actions zu verlinken. Dies geschieht beispielsweise mit “RedirectToAction”. Wenn man sich ein standard-CRUD System vorstellt, so macht dies durchaus Sinn.

public ActionResult NoWay()
{
    return RedirectToAction("Index");
}

In diesem Beispiel wird auf die Action Index am selben Controller verlinkt. Außerdem kann man beispielsweise sehr einfach ein Datum zurückgeben. Hierbei wird es in “Content” gewrappt. Today kann auch vom Controller aufgerufen werden.

public DateTime Today()
{
    return DateTime.Now;
}

image

Besonders interessant ist jedoch die Möglichkeit, weiter Typen wie Dateien oder JSON zurück zu geben. Vor allem JSON eignet sich hervorragend für JScript/jQuery Interaktionen.

public ActionResult JSONGoesToHell()
{
    return Json(new { Id = 1, Content = "Hello JSON" }, JsonRequestBehavior.AllowGet);
}

image

Dies gibt folgendes aus:

image

Im nächsten Post werden wir uns CustomRoutes mal ansehen und was die so alles schönes für uns machen können.

Kommentare (5) -

>

11.04.2011 15:28:28 #

Was wäre denn der Nachteil von ViewData und ist ViewData == ViewState?
Kann ich nur return View() aufrufen oder könnte ich einen anderen View ausgeben (ohne das RedirectToAction). Du hast diese und andere Fragen aufgeworfen, bleibst die Antwort aber schuldig.

Dennoch bis jetzt eine interessante Reihe zu MVC - mal sehen, wie es weiter geht.

Gruß
Rene

Rene Drescher-Hackel Germany

>

11.04.2011 21:45:16 #

ViewData und ViewState sind eigentlich nicht miteinander vergleichbar, da die 2 Paradigmen WebForms <> MVC FX auch meiner Meinung nach nur so gut wie Äpfel mit Birnen vergleichbar sind (Nashi Apfelbirnen mal ausgenommen Smile -> http://de.wikipedia.org/wiki/Nashi

Im WebForms Paradigma dreht sich alles um die Views, sie sind zentraler "Endpunkt" eines Requests und von den View "abwärts" sieht der Entwickler seine ASP.NET Applikation. Deshalb werden auch viele (tlw. sehr intelligente und umfangreiche) Server Controls verwendet, welche oft ihren Zustand im ViewState speichern müssen um sich nach einem PostBack wieder in den vorherhigen Zustand zu versetzen (zB DropDown Liste).

Im MVC FX ist das genau umgekehrt. Die Actions sind der Endpunkt (und werden via URL angestossen), das "Produkt" einer Action ist dann eine View. Jede Action erzeugt GENAU eine View, mit gleichem Namen, also void Index == /Index zB, deshalb ist RedirectToAction auch die richtige Methode um "serverseitig" einen Transfer von View zu View durchzuführen.

Die ViewData Auflistung wird verwendet um Daten an den Client zu übergeben.

Jede View kann zusätzlich von der generischen Basisklasse System.Web.Mvc.ViewPage<ViewModelType> ableiten und erhält damit eine streng typisierte Eigenschaft "ViewModel" welche den komplexen Typ mit allen Daten darstellt den die View dem User darstellen soll, oder den der User durch sein Eingaben erzeugt.

Muss man zusätzliche Daten übergeben (irgendwelche Dinge, die NICHT teil des ViewModels sind), kann man sie direkt in ViewData schreiben. Wobei das ViewModel aber idealerweise GENAU die Daten, welche die View darstellt umfasst. (deshalb ViewModel). Architektonisch werden ViewModels auf DomainObjects gemapped um sie zu persistieren - und umgekehrt um sie zu laden.

Man darf auch nicht vergessen, dass es mehrere Überladungen ein und derselben Action geben kann - mit unterschiedlichen Parametern. Einmal für HTTP GET und einmal für HTTP POST. Die "Create" Action einer CRUD Anwendung ist ein gutes Beispiel dafür. Erst wird /Create mittels GET aufgerufen und der User bekommen aus der Create Action eine View zur Eingabe dargestellt. Danach beim "Submit" wird Create mittels POST aufgerufen und in der Action werden die Form Parameter welche der Browser schickt verarbeitet (MVC FX kann diese automatisch auf eine Instanz des generischen ViewModels mappen)



Andreas Aschauer Austria

>

11.04.2011 21:46:44 #

codefest.at/.../...5-Das-ASPNET-MVC-Framework.aspx hier ist ein Überlick über das oben beschriebene

Andreas Aschauer Austria

>

16.04.2011 19:41:22 #

Für Ein- bzw. Umsteiger ein sehr interessantes Tutorial bisher, danke dafür. Freue mich auf die kommenden Teile.

Thomasz Ernowski Germany

>

15.08.2011 18:43:51 #

Es hat gut angefangen. So wie es aussieht, ist die Serie wohl leider eingeschlafen. Schade.

Rainer Hilmer Germany

Pingbacks and trackbacks (1)+

Kommentar schreiben

  Country flag

biuquote
  • Kommentar
  • Live Vorschau
Loading

Datenschutzhinweis: Sie stimmen durch "Kommentar speichern" der Speicherung Ihrer Angaben durch Microsoft Österreich für die Beantwortung der Anfrage zu. Sie erhalten dadurch keine unerwünschten Werbezusendungen. Ihre Emailadresse wird auf Ihren Wunsch dazu verwendet Sie über neue Kommentare zu informieren.

Microsoft respektiert den Datenschutz. Datenschutz & Cookies

Datenschutz & Cookies · Nutzungsbedingungen · Impressum · Markenzeichen
© 2013 Microsoft. Alle Rechte vorbehalten · BlogEngine.NET 2.7.0.0 · Diese Website wird für Microsoft von atwork gehostet.
powered by atwork