2010-01-08 8 views
7

Ich möchte zu einer Route umleiten, aber auch die Aktion angeben, die auf dem Controller dieser Route ausgeführt werden soll.Response.RedirectToRoute mit einer angegebenen Aktion

Ich versuchte dies:

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

Die Aktion sieht wie folgt aus:

public ActionResult ChangePassword() 
{} 

Die Route sieht wie folgt aus:

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

Der Fehler, den ich bekommen ist:

System.NotImplementiert Ausnahme: Die Methode oder Operation ist nicht implementiert.

Können Sie sehen, was ich falsch mache?

+2

Es ist ein [Fehler] (http://blog.slaks.net/2011/11/beware-of-responseredirecttoroute-in.html) in MVC3. @ ajay_whiz's Lösung hat für mich funktioniert. – booyaa

Antwort

0

Nun, Sie bekommen nur NotImplementedException, wenn etwas es wirft. Schauen Sie sich also die Stack-Trace (Call Stack) an und finden Sie die Routine, die sie ausgelöst hat. Wenn VS zum Beispiel automatisch eine Schnittstelle implementiert, wird der Körper dies werfen; Es wird erwartet, dass Sie die Implementierung ersetzen.

+0

Dies ist der Anfang des Stapels: bei System.Web.HttpResponseBase.RedirectToRoute (String routeName, Object routeValues) bei MVCApp.Controllers.LoginController.TryFormsLogin (Zeichenfolge Benutzername, String-Kennwort) in C: \ Dev \ AspenMVCTemplate \ Src \ Main \ MVCApp \ MVCApp \ Controller \ LoginController.cs: Zeile 110 –

+0

Also IE RedirectToRoute wirft die Ausnahme richtig? –

+0

Nein, 'RedirectToRoute' wird das nicht werfen. Aber die Sache, die 'RedirectToRoute' schließlich verursacht * genannt * (sagen wir, eine Funktion, die von Ihrer Aktion aufgerufen wird), könnte es sein. Versuchen Sie, einen Stapel auf einer "InnerException" zu betrachten, die Sie haben könnten. –

9

Ich hatte auch eine harte Zeit damit. Ich habe diese

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

Eine Möglichkeit, auf diese Methode zuzugreifen, nicht in einer Steuerung? – Shimmy

+0

@Shimmy wo möchten Sie darauf zugreifen? –

+0

'Application_Error'. Es ist natürlich möglich, eine neue Instanz zu erstellen, zu fragen, ob irgendwo eine statische Instanz existiert. – Shimmy

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

Diese Antwort ist ein genaues Duplikat von [this] (http://stackoverflow.com/a/5975320/75500) eins, das früher gepostet wurde. – Shimmy