Différence entre ViewResult () et ActionResult()

Quelle est la différence entre ViewResult() et ActionResult() en ASP.NET MVC?

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

public ActionResult Index()
{
    return View();
}
277
demandé sur GETah 2011-01-20 08:27:50

7 réponses

ActionResult est une classe abstraite qui peut avoir plusieurs sous-types.

Sous-Types ActionResult

  • ViewResult - Rend un spécifiés vue du flux de la réponse

  • PartialViewResult - Rend un spécifiés partie du flux de la réponse

  • EmptyResult - une réponse vide est retournée

  • RedirectResult - effectue une redirection HTTP vers une URL spécifiée

  • RedirectToRouteResult - effectue une redirection HTTP vers une URL qui est déterminée par le moteur de routage, basé sur les données de route

  • JsonResult - sérialise un objet ViewData donné au format JSON

  • JavaScriptResult - renvoie un morceau de code JavaScript qui peut être exécuté sur le client

  • ContentResult - écrit le contenu dans le flux de réponse sans exiger une vue

  • FileContentResult - Returns un fichier au client

  • FileStreamResult - retourne un fichier au client, qui est fourni par un flux

  • FilePathResult - retourne un fichier au client

ressources

353
répondu Divi 2013-01-10 14:48:18

ActionResult est une classe abstraite.

ViewResult dérive de ActionResult . Les autres classes dérivées comprennent JsonResult et PartialViewResult .

vous le déclarez de cette façon afin que vous puissiez profiter du polymorphisme et retourner différents types dans la même méthode.

E. g:

public ActionResult Foo()
{
   if (someCondition)
     return View(); // returns ViewResult
   else
     return Json(); // returns JsonResult
}
114
répondu RPM1984 2011-01-20 05:30:58

c'est pour la même raison que vous n'écrivez pas toutes les méthodes de chaque classe pour rendre"objet". Vous devez être aussi précis que vous le pouvez. Ceci est particulièrement précieux si vous prévoyez d'écrire des tests unitaires. Plus de test des types de retour et / ou de moulage du résultat.

29
répondu RickAndMSFT 2011-10-06 18:59:18

ViewResult est une sous-classe de ActionResult. La méthode View retourne un ViewResult. Si vraiment ces deux extraits de code faire exactement la même chose. La seule différence est qu'avec ActionResult one, votre controller ne promet pas de retourner une vue - vous pouvez changer le corps de la méthode pour retourner conditionnellement une RedirectResult ou quelque chose d'autre sans changer la définition de la méthode.

19
répondu Robert Levy 2011-01-20 05:33:50

alors que d'autres réponses ont noté les différences correctement, notez que si vous retournez en fait un ViewResult seulement, il est préférable de retourner le type plus spécifique plutôt que le type Base ActionResult. Une exception évidente à ce principe est lorsque votre méthode renvoie plusieurs types dérivés de ActionResult.

pour une discussion complète des raisons derrière ce principe s'il vous plaît voir la discussion connexe ici: doit ASP.NET contrôleur MVC Les Méthodes De Retour ActionResult?

10
répondu Zaid Masud 2017-05-23 12:26:10

dans le contrôleur, on pourrait utiliser la syntaxe suivante

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

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

Dans l'exemple ci-dessus , seul le type de retour varie . l'un renvoie ViewResult , tandis que l'autre renvoie ActionResult .

ActionResult est une classe abstraite . Elle peut accepter:

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

le ViewResult est une sous-classe de ActionResult .

3
répondu ruchit07 2014-07-31 11:21:53

dans Controller j'ai spécifié le code ci-dessous avec ActionResult qui est une classe de base qui peut avoir 11 sous-types dans MVC comme: ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteResult, JsonResult, JavaScriptResult, ContentResult, FileContentResult, 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
    }

de même, nous pouvons retourner tous ces 11 sous-types en utilisant ActionResult() sans spécifier explicitement chaque méthode de sous-types. ActionResult est la meilleure chose si vous êtes de retour différents types de vues.

0
répondu Abhishek D 2018-08-23 17:42:27