2011-07-31 13 views
0

私はASP.NET MVC3アプリケーションでルートを使用して遊べようとしており、マッピングコードの一部を減らそうとしています。私は、私たちに共通のUserController/Viewを使って、さまざまなエンティティ間でアプリケーションを試しています。たとえば、店舗や企業があり、それぞれに独自のユーザーセットがあります。次の2つのルートを減らす方法はありますか?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 
     ); 

及び{アクション}パラメーター(および{アクション}デフォルト)に設定されている:それは制約と一致するエンティティのエンティティのために使用することができるように、{エンティティ} +「インデックス」。

私はここに1に2つのルートを削減していますが、私の本当の問題は、単にこれら2つのエンティティ、より多くを必要とする、と私はこれが仕事を得ることができれば、私は同じ機能を模倣する必要があり、他のコントローラのためにこれを使用することができますし、他のアクションも(作成、編集など)。

おかげ

答えて

0

は、私は答えはそこになければならなかった考え出し、私はちょうど右のものを探していなかった、私は少しのためにStackOverflowを洗い上げ、私はソリューションの開発を支援し、この質問を見つけることができた。

 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:私はこのように見えるためにルートを設定することができ

asp.net mvc complex routing for tree path

次のように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); 
    } 
} 

最後に、私は道の上に、問題を複雑にして、あなたはこのような柔軟性

を持つことができます知っているために、これを必要とするが、その良いはありません