web-dev-qa-db-fra.com

RedirectToAction et RedirectToRoute

Dans mon contrôleur de page Web 1, je veux rediriger vers la page Web 2, en passant 2 variables.

J'ai essayé d'utiliser RedirectToRoute, mais je n'arrive pas à le faire fonctionner; une URL incorrecte s'affiche. Je suis ensuite passé à l'utilisation de RedirectToAction.

mon code:

Acheminement

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 (qui fonctionne)

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

RedirectToRoute (ne fonctionne pas)

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

Oh, et une autre chose, pouvez-vous rendre les paramètres obligatoires plutôt que facultatifs ... si oui, comment?

21
user1079925

Oubliez les paramètres par défaut pour rendre les paramètres requis:

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

Pour la redirection d'itinéraire, essayez ceci:

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

Une autre habitude que j'ai prise de Steve Sanderson n'est pas de nommer vos itinéraires. Chaque route peut avoir un nom nul, ce qui vous fait spécifier tous les paramètres explicitement:

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