ASP.NET MVC3路由映射减少帮助

时间:2011-07-31 16:58:16

标签: asp.net-mvc-3 routing

我正在尝试使用我的ASP.NET MVC3应用程序中的路径,并尝试减少我的一些映射代码。我正在尝试在我的应用程序中尝试跨越许多不同实体的常见UserController / View。例如,您有商店和公司,每个都有自己的一组用户。有没有办法减少以下两条路线:

        routes.MapRoute(
            "StoreUsers", // Route name 
            "Store/Details/{entityID}/User/Index", // URL with parameters
            new { controller = "User", action = "StoreIndex"} // Parameter defaults
        );

        routes.MapRoute(
            "CompanyUsers", // Route name 
            "Company/Details/{entityID}/User/Index", // URL with parameters
            new { controller = "User", action = "CompanyIndex"} // Parameter defaults
        );

对于类似于此的东西?

        routes.MapRoute(
            "EntityUsers", // Route name 
            "{entity}/Details/{entityID}/User/Index", // URL with parameters
            new { controller = "User", action = entity + "Index"} // Parameter defaults
            new { entity = "(Store|Company)" } //Parameter constraints
        );

并将{action}参数(和{action} default)设置为:{entity} +“Index”,以便它可以用于与约束匹配的实体实体。

我这里只减少2条路线到1,但我真正的问题只涉及这两个实体,如果我可以使用它,我可以将它用于其他必须模仿相同功能的控制器和其他动作(创建,编辑等)。

由于

1 个答案:

答案 0 :(得分:0)

我认为答案必须在那里,我只是没有寻找正确的东西,我搜索了StackOverflow一点点,并且能够找到这个帮助我开发解决方案的问题:

asp.net mvc complex routing for tree path

我可以设置一条看起来像这样的路线:

        routes.MapRoute(
            "EntityUsers", // Route name 
            "{entity}/Details/{entityID}/{controller}/{subaction}/{id}", // URL with parameters
            new {controller = "User", subaction = "Index", id = UrlParameter.Optional}, // Parameter defaults
            new {entity = "(Lender|Dealer)", controller="User"}
        ).RouteHandler = new UserRouteHandler();

,UserRouteHandler类如下所示:

public class UserRouteHandler : IRouteHandler {
    public IHttpHandler GetHttpHandler(RequestContext requestContext) {
        string entity = requestContext.RouteData.Values["entity"] as string;
        string subaction = requestContext.RouteData.Values["subaction"] as string;
        if (entity != null && subaction != null)
        {
            requestContext.RouteData.Values["action"] = entity + subaction;
        }
        return new MvcHandler(requestContext);
    }
}

最后,我总是把这个问题复杂化并且不需要这个,但很高兴知道你可以拥有这种灵活性