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.

Gavin
la source

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.

John Sheehan
la source
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");
 }
Mahender Reddy
la source
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.

Maeda
la source
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".)

Jeffreypriebe
la source
3

Voici ce que vous pouvez faire:

return View("another view name", anotherviewmodel);
Andrew
la source