2011-07-31 104 views
0

我想玩與我的ASP.NET MVC3應用程序中的路線是可能的,並嘗試減少我的一些映射代碼。我正在使用我的應用程序跨越多個不同的實體來嘗試使用常見的UserController/View。例如,您有商店和公司,並且每個都有自己的一組用戶。有什麼辦法可以減少以下兩條路線:ASP.NET MVC3路線映射減少幫助

 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 
     ); 

並具有{動作}參數(和{動作}默認值)設置爲:{實體} +「索引」,因此它可以被用於相匹配的約束實體的實體。

我在這裏只減少2條路由到1,但我真正的問題涉及更多,然後只是這兩個實體,如果我能得到這個工作,我可以使用此爲其他控制器必須模仿相同的功能和其他操作(創建,編輯等)。

感謝

回答

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(); 

和UserRouteH andler類看起來如下:

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); 
    } 
} 

最後,我被這個問題的方法在複雜化,並且不需要這個,但其良好知道你能有這樣的靈活性