2013-04-22 48 views
2


我想做的事情做在MVC幾個地圖路由都喜歡相同。
註冊在MVC asp.net多途徑

本地主機:1010/ABCD /家/索引
本地主機:1010 /家庭/索引/ ABCD

ID = ABCD控制器=家行動=指數

我用波紋管的代碼,但它不」 t工作

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "ShoppingManagment", 
      "{id}/{controller}/{action}", 
      new { controller = "ShoppingManagment", 
      action = "ShoppingManagment", id = UrlParameter.Optional }); 


     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", 
      action = "Index", id = UrlParameter.Optional } 
     ); 

    } 
+0

你想要這些路線匹配多個控制器或只是ShoppingManagement嗎?你的問題是,目前這兩個路由定義是相同的 - string/string/string,所以它們都會被頂層路由拾取。 – Richard 2013-04-22 05:29:30

回答

11

它不會工作,因爲兩個路由具有相同的格式。

所以MVC路由引擎不能同時URL模式進行區分。

嘗試直接寫入控制器進入URL模式。

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "ShoppingManagment", 
      "{id}/ShoppingManagment/{action}", 
      new { controller="ShoppingManagment", action = "ShoppingManagment", id = UrlParameter.Optional }); 


     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", 
      action = "Index", id = UrlParameter.Optional } 
     ); 

    } 
+0

plz檢查更新。 – Virus 2013-04-22 05:35:08

+0

我想使用第一種格式的特殊控制器和其他控制器使用第二種格式。我該怎麼做? – Ahmad 2013-04-22 05:36:46

+0

是的,通過使用固定的控制器在url模式中的第一條路線,你可以實現這一點...看到代碼在答案中有「S​​hoppingManagement」控制器到url模式,因此無論哪個網址將ShoppingManagement作爲第二個參數匹配此路線,其他人將匹配其他路線。 – Virus 2013-04-22 05:40:28