2012-01-20 14 views
19

En mi controlador de la página web 1, quiero redireccionar a la página web 2, pasando 2 variables.RedirectToAction y RedirectToRoute

Intenté usar RedirectToRoute, pero no puedo hacer que funcione; la URL incorrecta se muestra. Luego cambié a usar RedirectToAction.

mi código:

enrutamiento

routes.MapRoute(
    "CreateAdditionalPreviousNames", // Route name 
    "Users/{controller}/{action}/{userId}/{applicantId}", // URL with parameters 
    new { controller = "UsersAdditionalPreviousNames", action = "Index", userId = UrlParameter.Optional, applicantId = UrlParameter.Optional } // Parameter defaults 
); 

RedirectToAction (que funciona)

return RedirectToAction("Index", "UsersAdditionalPreviousNames", new { userId = user.Id, applicantId = applicant.Id }); 

RedirectToRoute (no funciona)

return RedirectToRoute("CreateAdditionalPreviousNames", new { userId = user.Id, applicantId = applicant.Id }); 

Ah, y otro cosa, puedes hacer los parámetros necesarios, en lugar de opcional ... si es así, ¿cómo?

+1

¿Qué espera que suceda si no proporciona los parámetros? Sí, es posible, pero todo lo que sucederá es que se producirá un error 404, o algo similar. ¿Es eso lo que quieres? –

Respuesta

19

parámetros por defecto para hacer Omitir parámetros necesarios:

routes.MapRoute(
    "CreateAdditionalPreviousNames", // Route name 
    "Users/{controller}/{action}/{userId}/{applicantId}", // URL with parameters 
    new { controller = "UsersAdditionalPreviousNames", action = "Index" } 
); 

Por ruta de redirección, intente esto:

return RedirectToRoute(new 
{ 
    controller = "UsersAdditionalPreviousNames", 
    action = "Index", 
    userId = user.Id, 
    applicantId = applicant.Id 
}); 

Otro hábito que tome de Steve Sanderson no es nombrar sus rutas. Cada ruta puede tener un nombre nulo, que le hace especificar todos los parámetros explícitamente:

routes.MapRoute(
    null, // Route name 
    "Users/{controller}/{action}/{userId}/{applicantId}", // URL with parameters 
    new { controller = "UsersAdditionalPreviousNames", action = "Index" } 
); 
+0

Gracias olivehour - que funcionó muy bien. Solo me preguntaba por qué mi versión de RedirectToRoute no funciona, ya que estoy siguiendo la firma del método sobrecargado ... ¿alguna idea? Gracias – user1079925

+0

@ user1079925, como dije, recogí el hábito de no nombrar mis rutas, así que nunca uso la sobrecarga que toma el nombre de una ruta. Con suerte, alguien más responderá quién puede decirle qué salió mal allí. Esta podría ser una de las razones para no nombrar sus rutas, el hábito me ha dado sus frutos. – danludwig

+0

Ok .... Voy a tomar su iniciativa y alejarme de la nomenclatura de rutas: parece más un obstáculo que una ayuda. – user1079925

Cuestiones relacionadas