Redirection ASP.Net MVC vers une vue différente


89

Est-il possible de rediriger vers une vue différente à partir d'un contrôleur?

Par exemple, tous mes contrôleurs héritent d'un contrôleur personnalisé qui a un constructeur que je souhaite rediriger vers une vue différente si certains critères ne sont pas remplis. J'espère que cela a du sens.

Réponses:


145

Vous pouvez utiliser la RedirectToAction()méthode, puis l'action vers laquelle vous redirigez peut renvoyer une vue. La manière la plus simple de procéder est:

return RedirectToAction("Index", model);

Ensuite, dans votre méthode Index, retournez la vue souhaitée.


1
Si je l'ai fait de cette façon, comment puis-je renvoyer une vue spécifique à partir d'une action de contrôleur.
Gavin le

18
return View ("ViewName");
Craig Stuntz

11
@Craig - la vue de retour ne fait pas de redirection et l'URL finit par être la même qu'avant. Donc, si vous êtes dans "/ edit / MyItem", le retour de View ("showitem") vous donnera la vue "showitem" avec l'url "/ edit /". Selon votre situation, cela peut fonctionner, mais pas toujours.
jeffreypriebe

5
@jeffrey, c'est deux étapes distinctes: Rediriger dans la première action, comme l'a dit John, puis renvoyer View dans la seconde. La première action ne peut pas (directement, de toute façon) dire à la seconde quelle vue utiliser.
Craig Stuntz

@Craig qui aide un peu. Il y a une «action» et une «vue» - deux choses distinctes. Pourquoi ma réponse ci-dessous fonctionne-t-elle: RedirectToAction - pas de changement de vue. Je suis sûr que c'est .net MVC 101 mais je ne comprends pas. Merci.
jeffreypriebe

19
 if (true)
 {
   return View();
 }
 else
 {
   return View("another view name");
 }

2
Cela utilise la même action de contrôleur. RedirectToAction appelle une action différente. C'était la solution la plus simple pour moi.
RaoulRubin

6

Le moyen le plus simple consiste à utiliser return View.

return View("ViewName");

N'oubliez pas que le nom physique du "ViewName" doit être quelque chose comme ViewName.cshtml dans votre projet, si vous utilisez MVC C # / .NET.


4

Je ne suis pas sûr à 100% des conditions pour cela, mais pour moi, ce qui précède n'a pas fonctionné directement, je pensais que c'était proche. Je pense que c'était parce que j'avais besoin de "id" pour ma vue par dans le modèle il s'appelait "ObjectID".

J'avais un modèle avec une variété d'informations. J'avais juste besoin de l'identifiant.

Avant ce qui précède, j'ai créé un nouvel objet System.Web.Routing.RouteValueDictionary et ajouté l'ID nécessaire.

(System.Web.Routing.)RouteValueDictionary RouteInfo = new RouteValueDictionary();
RouteInfo.Add("id", ObjectID);
return RedirectToAction("details", RouteInfo);

(Remarque: le projet MVC en question que je n'ai pas créé, donc je ne sais pas où se trouvent tous les bons bits "fiddly".)


3

Voici ce que vous pouvez faire:

return View("another view name", anotherviewmodel);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.