RedirectToAction和RedirectToRoute

时间:2012-01-20 16:09:20

标签: c# .net asp.net-mvc asp.net-mvc-routing

在我的网页1控制器中,我想重定向到网页2,传递2个变量。

我尝试使用RedirectToRoute,但无法让它工作;显示错误的URL。 然后我切换到使用RedirectToAction。

我的代码:

路由

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(有效)

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

RedirectToRoute(不起作用)

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

哦,另外一件事,你能否制作所需的参数,而不是可选的....如果是的话,怎么做?

1 个答案:

答案 0 :(得分:23)

省略参数默认值以生成所需参数:

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

对于路线重定向,请尝试以下操作:

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

我从史蒂夫桑德森那里得到的另一个习惯就是没有命名你的路线。每个路由都可以具有空名称,这使您可以明确指定所有参数:

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