2010-01-08 5 views
7

Je souhaite rediriger vers un itinéraire mais également spécifier l'action à exécuter sur le contrôleur de cette route.Response.RedirectToRoute avec une action spécifiée

J'ai essayé ceci:

Response.RedirectToRoute("Login", new { action = "ChangePassword" }); 

L'action ressemble à ceci:

public ActionResult ChangePassword() 
{} 

L'itinéraire ressemble à ceci:

routes.MapRoute("Login", "Login/{action}", new { controller = "Login", 
action = "Index" }); 

L'erreur que je reçois est:

System.NotImplemented Exception: la méthode ou l'opération n'est pas implémentée.

Pouvez-vous voir ce que je fais mal?

+2

Il est un [bug] (http://blog.slaks.net/2011/11/beware-of-responseredirecttoroute-in.html) dans MVC3. La solution de @ ajay_whiz a fonctionné pour moi. – booyaa

Répondre

0

Eh bien, vous obtenez seulement NotImplementedException quand quelque chose le lance. Regardez donc la trace de la pile (Call Stack) et trouvez la routine qui l'a lancée. Quand VS implémente automatiquement une interface, par exemple, le corps va lancer ceci; vous êtes censé remplacer l'implémentation.

+0

Ceci est le haut de la pile: à System.Web.HttpResponseBase.RedirectToRoute (String routeName, Object routeValues) at MVCApp.Controllers.LoginController.TryFormsLogin (nom d'utilisateur String, mot de passe String) dans C: \ Dev \ AspenMVCTemplate \ Src \ Main \ MVCApp \ MVCApp \ Contrôleurs \ LoginController.cs: ligne 110 –

+0

Donc IE RedirectToRoute lève l'exception correctement? –

+0

Non, 'RedirectToRoute' ne lancera pas ceci. Mais la chose que 'RedirectToRoute' cause finalement d'être appelée * (disons, une fonction appelée par votre action) pourrait bien l'être. Essayez de regarder une pile sur une 'InnerException' que vous pourriez avoir. –

9

J'ai aussi eu du mal avec ça. Je l'ai fait

Response.Redirect(Url.RouteUrl(new{ controller="controller", action="action"})); 
+1

N'importe quelle façon d'accéder à cette méthode pas dans un contrôleur? – Shimmy

+0

@Shimmy où voulez-vous accéder? –

+0

'Application_Error'. Il est évidemment possible de créer une nouvelle instance, question si une instance statique existe n'importe où. – Shimmy

-2
return Redirect(Url.RouteUrl(new { controller = "Controller", action = "Action" })); 
+2

Cette réponse est une copie exacte de celle-ci (http://stackoverflow.com/a/5975320/75500), qui a été publiée plus tôt. – Shimmy

Questions connexes