RedirectToAction 和 RedirectToRoute
Posted
技术标签:
【中文标题】RedirectToAction 和 RedirectToRoute【英文标题】:RedirectToAction and RedirectToRoute 【发布时间】:2012-02-15 04:36:58 【问题描述】:在我的网页 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 );
哦,还有一件事,你能把参数设置成必需的,而不是可选的……如果是这样,怎么做?
【问题讨论】:
如果他们不提供参数,你期望会发生什么?是的,这是可能的,但会发生 404 错误或类似的事情。这就是你想要的吗? 【参考方案1】:省略参数默认值以使参数成为必需:
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"
);
【讨论】:
感谢 Olivehour - 效果很好。只是想知道为什么我的 RedirectToRoute 版本不起作用,因为我遵循重载方法的签名......有什么想法吗?谢谢 @user1079925,就像我说的,我养成了不命名路由的习惯,所以我从不使用带路由名称的重载。希望其他人会回答谁可以告诉您那里出了什么问题。这可能是不给你的路线命名的原因之一,这个习惯让我得到了回报。 好的....我将带头并远离路线命名 - 似乎它是一种障碍而不是一种帮助。 这并没有回答问题中描述的问题的解决方案,那么如何将其标记为已接受的答案以上是关于RedirectToAction 和 RedirectToRoute的主要内容,如果未能解决你的问题,请参考以下文章
跨控制器跳转view——RedirectToRoute和RedirectToAction
使用 RedirectToAction 时如何跳过控制器名称?
如何在 ASP.NET MVC 6 中继续使用 ModelState 和 RedirectToAction?
.NET MVC 是不是具有强类型的 RedirectToAction?
asp.net mvc: 将 RedirectToAction(string, object) 变成 RedirectToAction<Controller>(x => x.Deta