2010-01-08 14 views
7

Deseo redireccionar a una ruta pero también especificar la acción para ejecutar en el controlador de esa ruta.Response.RedirectToRoute con una acción especificada

yo probamos este:

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

La acción tiene el siguiente aspecto:

public ActionResult ChangePassword() 
{} 

El recorrido es el siguiente:

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

El error que consigo es:

System.NotImplemented Excepción: el método u operación no está implementado.

¿Puedes ver lo que estoy haciendo mal?

+2

Es un [error] (http://blog.slaks.net/2011/11/beware-of-responseredirecttoroute-in.html) en MVC3. La solución de @ ajay_whiz funcionó para mí. – booyaa

Respuesta

0

Bueno, solo obtienes NotImplementedException cuando algo lo arroja. Así que mira el rastro de la pila (Pila de llamadas) y encuentra la rutina que lo arrojó. Cuando VS implementa automáticamente una interfaz, por ejemplo, el cuerpo lanzará esto; se espera que reemplace la implementación.

+0

Este es el principio de la pila: en System.Web.HttpResponseBase.RedirectToRoute (String RouteName, routeValues ​​objeto) en MVCApp.Controllers.LoginController.TryFormsLogin (String nombre de usuario, contraseña String) en C: \ Dev \ AspenMVCTemplate \ Src \ Main \ MVCApp \ MVCApp \ Controllers \ LoginController.cs: línea 110 –

+0

Así que IE RedirectToRoute lanza la excepción ¿verdad? –

+0

No, 'RedirectToRoute' no lanzará esto. Pero lo que 'RedirectToRoute' hace que * se llame * (por ejemplo, una función llamada por su acción) simplemente podría hacerlo. Intenta mirar una pila en cualquier 'InnerException' que puedas tener. –

9

Yo también tuve un momento difícil con esto. Hice esto

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

¿Hay alguna forma de acceder a este método que no esté en un controlador? – Shimmy

+0

@Shimmy ¿dónde quieres acceder? –

+0

'Application_Error'. Obviamente es posible crear una nueva instancia, pregunta si existe una instancia estática en cualquier lugar. – Shimmy

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

Esta respuesta es un duplicado exacto de [este] (http://stackoverflow.com/a/5975320/75500) uno, que se ha publicado anteriormente. – Shimmy

Cuestiones relacionadas