【问题标题】:RedirectToAction and RedirectToRouteRedirectToAction 和 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 错误或类似的事情。这就是你想要的吗?

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


【解决方案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,就像我说的,我养成了不命名路由的习惯,所以我从不使用带路由名称的重载。希望其他人会回答谁可以告诉您那里出了什么问题。这可能是不给你的路线命名的原因之一,这个习惯让我得到了回报。
  • 好的....我将带头并远离路线命名 - 似乎它是一种障碍而不是一种帮助。
  • 这并没有回答问题中描述的问题的解决方案,那么如何将其标记为已接受的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2017-12-23
相关资源
最近更新 更多