【问题标题】:ASP.NET MVC Routes: How to define custom routeASP.NET MVC 路由:如何定义自定义路由
【发布时间】:2010-11-02 17:10:11
【问题描述】:

我在网上寻找了这个问题的答案,但老实说,我似乎找不到 MVC 路线的好参考。

我的 User 对象有一个 UserController。可以对用户进行编辑、保存、查看等操作,因此我在该控制器中有操作来处理其中的每一个。这一切都很简单。但是我最近创建了一个新的 UserProfile 对象,它也可以编辑、查看等。我不想为 UserProfile 创建一个全新的控制器,而是想利用现有的 UserController。因此,要查看用户的个人资料,我希望 URL 为:

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

要进行编辑,我希望 URL 为:

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

UserController 中的每个操作都将返回不同的视图页面。

我将如何定义路由来处理这种结构?非常感谢。

【问题讨论】:

    标签: asp.net-mvc routes custom-routes


    【解决方案1】:

    在您的 Global.asax 文件的 RegisterRoutes() 方法中执行以下操作:

    routes.MapRoute(
        "ProfileRoute",
        "User/Profile/{action}/{userProfileID}",
        new { controller = "User", action = "Index" });
    

    正如 cmets 所指出的......这必须在默认路由之前。

    【讨论】:

    • 另外,作为一个仅供参考,因为它抓住了我,它必须在默认路由之前声明
    • 所以这条路线看起来会处理 /User/Profile/Edit/{userProfileID} 的情况,因为我可以在 Edit 的 UserController 中进行操作,但是只查看配置文件呢?我不需要编写一个名为 View 的操作方法或其他能够做到这一点的方法吗?我怎么会有 /User/Profile/{userProfileID}?此外,为了能够处理 Edit 案例,在给定自定义路由的情况下,UserController 中的操作需要命名什么?它看起来像“索引”,但我怎么能称它为“编辑”?
    • 该路由声明的最后一行是默认值。 URL 的 {action} 部分中提供的任何内容都将覆盖该默认值。
    • 因此,如果我已经在 UserController 中定义了一个 Edit 操作来处理对用户的编辑,那么这将不起作用,因为我需要另一个名为 Edit 的 UserProfile 操作:“User/Edit”和“用户/配置文件/编辑”——这两个操作都在同一个控制器中。
    猜你喜欢
    • 2011-04-02
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多