it-swarm.com.de

Unterschied zwischen ViewResult () und ActionResult ()

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

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

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

ActionResult ist eine abstrakte Klasse, die mehrere Untertypen 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 vom Routingmodul __. basierend auf den angegebenen Routendaten bestimmt wird

  • JsonResult - Serialisiert ein bestimmtes ViewData-Objekt im JSON-Format

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

  • ContentResult - Schreibt Inhalt 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

363
Divi

ActionResult ist eine abstrakte Klasse.

ViewResult leitet sich von ActionResult ab. Andere abgeleitete Klassen umfassen JsonResult und PartialViewResult .

Sie deklarieren es auf diese Weise, damit Sie den Polymorphismus nutzen und verschiedene Typen mit derselben Methode zurückgeben können.

z.B:

public ActionResult Foo()
{
   if (someCondition)
     return View(); // returns ViewResult
   else
     return Json(); // returns JsonResult
}
117
RPM1984

Aus demselben Grund schreiben Sie nicht jede Methode jeder Klasse, um "object" 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 das Ergebnis.

31
RickAndMSFT

ViewResult ist eine Unterklasse von ActionResult. Die View-Methode gibt ein ViewResult zurück. Also machen diese beiden Codeausschnitte genau das gleiche. Der einzige Unterschied besteht darin, dass Ihr Controller mit ActionResult keine Aussicht verspricht, eine Ansicht zurückzugeben. Sie können den Methodentext so ändern, dass er ein RedirectResult oder etwas anderes zurückgibt, ohne die Methodendefinition zu ändern.

20
Robert Levy

Beachten Sie, dass bei anderen Antworten die Unterschiede richtig notiert wurden. Wenn Sie tatsächlich nur ViewResult zurückgeben, ist es besser, den spezifischeren Typ als den Basistyp ActionResult zurückzugeben. Eine offensichtliche Ausnahme von diesem Prinzip besteht darin, dass Ihre Methode mehrere von ActionResult abgeleitete Typen zurückgibt.

Eine ausführliche Beschreibung der Gründe für dieses Prinzip finden Sie in der zugehörigen Diskussion hier: Muss ASP.NET MVC Controller-Methoden ActionResult zurückgeben?

11
Zaid Masud

Im Controller könnte man die folgende Syntax verwenden

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

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

Im obigen Beispiel variiert nur der Rückgabetyp. Eine gibt ViewResult zurück, während die andere ActionResult zurückgibt.

ActionResult ist eine abstrakte Klasse. Es kann akzeptieren:

ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteResult, JsonResult, JavaScriptResult, ContentResult, FileContentResult, FileStreamResult, FilePathResult usw.

Die ViewResult ist eine Unterklasse von ActionResult.

4
ruchit

In Controller habe ich den folgenden Code mit ActionResult angegeben, einer Basisklasse, die 11 Untertypen in MVC enthalten kann, wie: ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteResult, JsonResult, JavaScriptResult, ContentResult, .__ , FileStreamResult, FilePathResult.

    public ActionResult Index()
                {
                    if (HttpContext.Session["LoggedInUser"] == null)
                    {
                        return RedirectToAction("Login", "Home");
                    }

                    else
                    {
                        return View(); // returns ViewResult
                    }

                }
//More Examples

    [HttpPost]
    public ActionResult Index(string Name)
    {
     ViewBag.Message = "Hello";
     return Redirect("Account/Login"); //returns RedirectResult
    }

    [HttpPost]
    public ActionResult Index(string Name)
    {
    return RedirectToRoute("RouteName"); // returns RedirectToRouteResult
    }

Ebenso können wir alle diese 11 Subtypen mit ActionResult () zurückgeben, ohne jede Subtype-Methode explizit anzugeben. ActionResult ist das Beste, wenn Sie unterschiedliche Arten von Ansichten zurückgeben. 

0