RedirectToAction和RedirectToRoute

use*_*925 21 .net c# 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
);
Run Code Online (Sandbox Code Playgroud)

RedirectToAction(有效)

return RedirectToAction("Index", "UsersAdditionalPreviousNames", new { userId = user.Id, applicantId = applicant.Id });
Run Code Online (Sandbox Code Playgroud)

RedirectToRoute(不起作用)

return RedirectToRoute("CreateAdditionalPreviousNames", new { userId = user.Id, applicantId = applicant.Id });
Run Code Online (Sandbox Code Playgroud)

哦,还有另外一件事,你可以制作所需的参数,而不是可选的....如果是这样,怎么样?

dan*_*wig 25

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

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

对于路由重定向,请尝试以下方法:

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

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

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

  • 这并没有回答问题中描述的问题的解决方案,那么如何将其标记为已接受的答案 (5认同)