【问题标题】:ASP.NET MVC Routes: Conflicting action names with custom routeASP.NET MVC 路由:操作名称与自定义路由冲突
【发布时间】:2010-11-02 17:46:20
【问题描述】:

我都是,

在previous question 中,我询问了如何定义自定义路由来处理以下 URL:

http://www.example.com/User/Profile/Edit/{userProfileID}

我有一个 User 对象和一个 UserProfile 对象,但只有一个我希望能够用于两个对象上的操作的 UserController。我已经在 UserController 中有一个名为 Edit 的方法来处理对用户的编辑。但我还需要一种对 UserProfile 进行编辑的方法。我的路由问题的答案是以下路由:

routes.MapRoute(
    "ProfileleRoute", // Route name
    "User/Profile/{action}/{userProfileID}", // URL with parameters
    new { controller = "User", action = "Index" } // Parameter defaults
);

但是考虑到自定义路由,我应该在哪里声明 UserProfile 的编辑操作,应该调用什么?似乎我无法在 UserController 中编写另一个名为 Edit 的方法,因为我已经有一个处理用户编辑的方法。

所以我觉得我最终需要两个编辑操作来处理以下路由:“用户/编辑”和“用户/配置文件/编辑”。我该如何解决这个问题?

非常感谢。

【问题讨论】:

  • 你是说需要区分 User/Edit 和 User/Profile/Edit 吗?
  • 是的,正是我所说的。编辑问题更清楚。
  • 为什么需要绕过它?它不是很能代表你的需要吗?还是它们是一样的?
  • 也许这回答了我的问题。我可以在 UserController 中只有两个操作方法,都称为 Edit,但需要两个不同的参数吗?我需要能够区分这两个操作,因为这些操作完全不同,具体取决于我是在编辑用户还是用户配置文件。
  • 仅供参考:我就我们在这里讨论的内容发布了一个新的、更清晰的问题:stackoverflow.com/questions/4080897/…

标签: asp.net-mvc custom-routes


【解决方案1】:

当框架要选择要执行的操作时,首先检查具有与请求匹配的 HttpPost 或 HttpGet 属性所需的名称的操作,如果没有以这种方式选择操作,那么它会选择与请求匹配的任何操作姓名。 所以,如果你有两个没有 HttpPost 或 HttpGet 属性的同名动作,你就无法控制动作是否会被执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-03
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多