asp.net mvc tutorial deutsch




Unterschied zwischen ViewResult() und ActionResult() (4)

Was ist der Unterschied zwischen ViewResult() und ActionResult() in ASP.NET MVC?

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

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

ActionResult ist eine abstrakte Klasse, die mehrere Subtypen haben kann.

ActionResult-Subtypen

  • ViewResult - Rendert eine angegebene Ansicht für den Antwortstream

  • PartialViewResult - Rendert eine angegebene Teilansicht für den Antwortstream

  • EmptyResult - Eine leere Antwort wird zurückgegeben

  • RedirectResult - Führt eine HTTP-Umleitung zu einer angegebenen URL durch

  • RedirectToRouteResult - Führt eine HTTP-Umleitung zu einer URL durch, die anhand der angegebenen Routendaten von der Routing-Engine bestimmt wird

  • JsonResult - Serialisiert ein bestimmtes ViewData-Objekt in das JSON-Format

  • JavaScriptResult - Gibt einen Teil des JavaScript-Codes zurück, der auf dem Client ausgeführt werden kann

  • ContentResult - Schreibt Inhalte in den Antwortstream, ohne dass eine Ansicht erforderlich ist

  • FileContentResult - Gibt eine Datei an den Client zurück

  • FileStreamResult - Gibt eine Datei an den Client zurück, die von einem Stream bereitgestellt wird

  • FilePathResult - Gibt eine Datei an den Client zurück

Ressourcen


Aus demselben Grund schreiben Sie nicht jede Methode jeder Klasse, um "Objekt" zurückzugeben. Sie sollten so genau wie möglich sein. Dies ist besonders nützlich, wenn Sie Komponententests schreiben möchten. Keine weiteren Rückgabetypen und / oder Ergebnisse.


ViewResult ist eine Unterklasse von ActionResult. Die View-Methode gibt ein ViewResult zurück. Also diese zwei Code-Snippets machen genau dasselbe. Der einzige Unterschied besteht darin, dass Ihr Controller mit ActionResult nicht die Rückgabe einer Ansicht verspricht - Sie könnten den Methodenkörper ändern, um ein RedirectResult oder etwas anderes bedingungslos zurückzugeben, ohne die Methodendefinition zu ändern.


Während andere Antworten die Unterschiede richtig notiert haben, beachten Sie, dass, wenn Sie tatsächlich nur ein ViewResult zurückgeben, es besser ist, den spezifischeren Typ als den Basis-ActionResult-Typ zurückzugeben. Eine offensichtliche Ausnahme von diesem Prinzip ist, wenn Ihre Methode mehrere Typen zurückgibt, die von ActionResult abgeleitet sind.

Für eine vollständige Diskussion der Gründe hinter diesem Prinzip finden Sie in der zugehörigen Diskussion hier: Müssen ASP.NET MVC Controller Methoden ActionResult zurückgeben?





asp.net-mvc