ASP.NET MVC路由:如何命名与URL完全不同的操作

时间:2010-11-02 18:26:36

标签: asp.net-mvc custom-routes

这是我之前几个问题的延续。我有一个名为UserController的控制器,我想处理两种类型对象的操作:User和UserProfile。在其他操作中,我想为这两个对象和UserController定义一个Edit操作。它们需要是单独的操作,我不介意在 controller 中将它们称为EditUser和EditProfile,但我更喜欢URL看起来像这样:

http://www.example.com/User/Edit/{userID}

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

有没有人知道如何实现这些路线,因为对同一控制器中的动作有所限制?

对于上下文,之前的问题是herehere

感谢。

3 个答案:

答案 0 :(得分:6)

只是一个建议,但你不能做这样的事情来映射正确的路线吗?

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

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

编辑: 然后在你的控制器中创建两个单独的方法,名为EditUser(guid userId)和Editprofile(guid userId)

答案 1 :(得分:4)

您可以尝试以下内容:(未经测试)

routes.MapRoute(
    "EditUser",
    "User/Edit/{userID}", 
    new { controller = "User", action = "EditUser" });

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

编辑:

使用MvcContrib(可从http://mvccontrib.codeplex.com/获得),语法更加清晰:

(using MvcContrib.Routing;)

MvcRoute
    .MappUrl("User/Edit/{userID}")
    .WithDefaults(new { controller = "User", action = "EditUser" })
    .AddWithName("EditUser", routes);

MvcRoute
    .MappUrl("User/Profile/Edit/{userProfileID}")
    .WithDefaults(new { controller = "User", action = "EditProfile" })
    .AddWithName("EditProfile", routes);

答案 2 :(得分:1)

using MvcContrib.Routing;

public class UserController : Controller
{
    [UrlRoute(Path = "User/Edit/{userID}")]
    public ActionResult UserEdit(int userID)
    { 

    }
}