Was ist der Unterschied zwischen ViewResult()
und ActionResult()
in ASP.NET MVC?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
asp.net
asp.net-mvc
Domnic
quelle
quelle
Antworten:
ActionResult ist eine abstrakte Klasse, die mehrere Untertypen haben kann.
ActionResult-Subtypen
ViewResult - Rendert eine bestimmte Ansicht des Antwortstroms
PartialViewResult - Rendert eine bestimmte Teilansicht des Antwortstroms
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 von der Routing-Engine basierend auf den angegebenen Routendaten festgelegt 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 Antwortstrom, 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
quelle
ActionResult ist eine abstrakte Klasse.
ViewResult leitet sich von ActionResult ab . Andere abgeleitete Klassen umfassen JsonResult und PartialViewResult .
Sie deklarieren dies auf diese Weise, damit Sie den Polymorphismus nutzen und verschiedene Typen in derselben Methode zurückgeben können.
z.B:
quelle
Aus dem gleichen 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 Unit-Tests schreiben möchten. Keine Rückgabetypen mehr testen und / oder das Ergebnis gießen.
quelle
ViewResult ist eine Unterklasse von ActionResult. Die View-Methode gibt ein ViewResult zurück. Diese beiden Codefragmente machen also genau dasselbe. Der einzige Unterschied besteht darin, dass Ihr Controller mit ActionResult nicht verspricht, eine Ansicht zurückzugeben. Sie können den Methodenkörper so ändern, dass er ein RedirectResult oder etwas anderes bedingt zurückgibt, ohne die Methodendefinition zu ändern.
quelle
Während andere Antworten die Unterschiede korrekt notiert haben, ist es besser, wenn Sie tatsächlich nur ein ViewResult zurückgeben, den spezifischeren Typ anstelle des ActionResult-Basistyps zurückzugeben. Eine offensichtliche Ausnahme von diesem Prinzip besteht darin, dass Ihre Methode mehrere Typen zurückgibt, die von ActionResult abgeleitet sind.
Eine vollständige Erläuterung der Gründe für dieses Prinzip finden Sie in der entsprechenden Erläuterung hier: Müssen ASP.NET MVC-Controller-Methoden ActionResult zurückgeben?
quelle
Im Controller könnte man die folgende Syntax verwenden
Im obigen Beispiel variiert nur der Rückgabetyp. einer kehrt zurück,
ViewResult
während der andere zurückkehrtActionResult
.ActionResult ist eine abstrakte Klasse. Es kann akzeptieren:
ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteResult, JsonResult, JavaScriptResult, ContentResult, FileContentResult, FileStreamResult, FilePathResult usw.
Das
ViewResult
ist eine Unterklasse vonActionResult
.quelle
In Controller habe ich den folgenden Code mit ActionResult angegeben, einer Basisklasse, die 11 Untertypen in MVC haben kann, wie: ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteResult, JsonResult, JavaScriptResult, ContentResult, FileContentResult, FileStream.
Ebenso können wir alle diese 11 Subtypen mit ActionResult () zurückgeben, ohne jede Subtypmethode explizit anzugeben. ActionResult ist das Beste, wenn Sie verschiedene Arten von Ansichten zurückgeben.
quelle
Um Ihnen Zeit zu sparen, finden Sie hier die Antwort von einem Link in einer früheren Antwort unter https://forums.asp.net/t/1448398.aspx
ActionResult ist eine abstrakte Klasse und die Basisklasse für die ViewResult-Klasse.
Im MVC-Framework wird die ActionResult-Klasse verwendet, um auf das Objekt zu verweisen, das Ihre Aktionsmethode zurückgibt. Und ruft die ExecuteResult-Methode auf.
Und ViewResult ist eine Implementierung für diese abstrakte Klasse. Es wird versucht, eine Ansichtsseite (normalerweise eine Aspx-Seite) in einigen vordefinierten Pfaden (/ views / controllerername /, / views / shared / usw.) anhand des angegebenen Ansichtsnamens zu finden.
Es ist normalerweise eine gute Praxis, wenn Ihre Methode eine spezifischere Klasse zurückgibt. Wenn Sie also sicher sind, dass Ihre Aktionsmethode eine Ansichtsseite zurückgibt, können Sie ViewResult verwenden. Wenn Ihre Aktionsmethode jedoch ein anderes Verhalten aufweist, z. B. eine Ansicht rendern oder eine Umleitung durchführen. Sie können die allgemeinere Basisklasse ActionResult als Rückgabetyp verwenden.
quelle