J'ai une méthode d'action, et en fonction de ce qui lui est passé, je veux rediriger vers une autre action dans un autre contrôleur. Les noms d'action et de contrôleur sont déterminés au moment de l'exécution.Dans ASP.NET MVC, conserver l'URL lors de la restitution RedirectToAction
Si je renvoie RedirectToAction(), cela forcera une redirection et changera l'URL dans le navigateur. Ce que je voudrais, c'est quelque chose comme TransferToAction() qui peut transférer le traitement de la requête en cours vers une autre action, sans faire de redirection. Je me souviens d'une méthode qui se comporte comme ça dans les aperçus précédents, mais je n'arrive pas à le trouver dans la RC d'ASP.NET MVC.
Savez-vous comment je ferais cela?
MISE À JOUR
I ajouté l'itinéraire suivant:
routes.MapRoute(
"PageRouter",
"{site}/{*url}",
new { controller = "PageRouter",
action = "RoutePage", site = "", url = "" }
);
Et l'action du contrôleur PageRouter RoutePage:
public ActionResult RoutePage(string site, string url)
{
var controller = new HomeController {ControllerContext = ControllerContext};
controller.RouteData.Values["controller"] = "Home";
controller.RouteData.Values["action"] = "Index";
return controller.Index(site, url);
}
je devais régler le contrôleur et l'action en RouteData pour l'Index vue à rendre. Sinon, il recherchera une vue Index dans PageRouterController.
J'ai encore besoin de comprendre comment créer un contrôleur et son action ne connaissant que leurs noms. par exemple. Je voudrais être en mesure de simplement appeler quelque chose comme ceci:
public ActionResult RoutePage(string site, string url)
{
return InvokeAction("Home", "Index");
}
Que devrait aller dans InvokeAction()? Ai-je besoin de passer le contexte?
Donc je vais devoir utiliser la réflexion pour appeler la méthode d'action? Je ne connais pas le nom de l'action ou du contrôleur que je redirige avant l'exécution. –
En outre, qu'en est-il du contexte du contrôleur? Cette méthode ne semble pas fonctionner pour moi. –
Le contexte du contrôleur sera le même. Ce qui semble ne pas fonctionner? Peut-être que vous pourriez poster du code. – tvanfosson