2010-01-28 31 views
2

我在我的ASP.NET MVC應用程序中有兩個(到目前爲止)不同類型的路由,一個是:{controller}/{action}/{id}和另一個{controller}/{行動}/{TITLE}兩種不同的通用路由類型

目前我需要像這樣定義路由:

 routes.MapRoute (
      "Default_Title_Slug",          // Route name 
      "product/details/{title}",       // URL with parameters 
      new { controller = "product", action = "details", title = "" }  // Parameter defaults 
     ); 

     routes.MapRoute (
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "site", action = "index", id = "" } // Parameter defaults 
     ); 

注意,第一個我不得不闋產品控制器,這似乎是隻有這樣我才能得到它的工作......否則其他路線最終看起來像這樣:

/controller/action?id=number 

現在我需要添加另一個MapRoute調用,以{title}段爲目標的另一個控制器...我不想爲將來提出的每個特定條目創建一個新路由...是否有一個通用的路線我可以創建映射/控制器/行動/標題,將與/控制器/動作/ ID路線很好地發揮?

感謝,
基隆

+0

請停止回滾正在添加正確標記的更改 – skaffman 2010-01-28 12:56:00

+0

它已在asp.net下標記,實際上路由是特定於asp.net的。停止添加無意義的標籤。 – Kieron 2010-01-28 12:56:32

+1

重新標記;路由比MVC更廣泛(它也可以和webforms一起使用),很少有人會觀看這樣的granalur標籤 - 這是非常值得的。 – 2010-01-28 13:07:17

回答

4

你可以做到這一點的路線約束,如正則表達式 - 一個非常類似例子是here。例如:

routes.MapRoute (
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "site", action = "index", id = "" }, 
    new { id = @"\d+" } 
); 
routes.MapRoute (
    "Default_Title_Slug", 
    "{controller}/{action}/{title}", 
    new { controller = "product", action = "details", title = "" } 
); 
+0

完美,謝謝! – Kieron 2010-01-28 13:04:46

+0

只需要清楚,Default_Title_Slug現在可以將它的url更改爲 {controller}/{action}/id 012fftoo – Kieron 2010-01-28 13:05:49

+0

@Kieron - 歡呼聲 - 複製/粘貼錯誤;-p固定。 – 2010-01-28 13:08:06

相關問題