2009-10-24 190 views
0

我有一些問題試圖在MVC中設置我的路由。我想我理解它是如何工作的,但我似乎無法設定正確的路徑。ASP.NET MVC路由問題

基本上我想要做類似的東西StackOverflow的是如何工作的這樣:

http://localhost/faq

我想這搶HomeController中,命中幫助行動並返回FAQ視圖。我似乎無法弄清楚如何做到這一點。

而且,我嘗試添加一個新的路線是這樣的:

http://localhost/Boxes/25

因此,盒是控制器,25是明顯的ID(參數)。到計算器怎麼也有類似的:https://stackoverflow.com/questions/[question數]/[問題標題]

所以我試着這樣做:

routes.MapRoute(
     "Boxes", 
     "Boxes/{boxnumber}", 
     new { 
      action="Details", cubenumber = "" 

} );

沒有成功。

我也下載了Route Tester應用程序,但在這一點上似乎沒有幫助。我很可能需要真正瞭解路由是如何工作的,但只是想知道現在是否有人能夠指引我正確的方向,而不是我必須旋轉我的輪子。

非常感謝你們!

回答

2

嘗試以下操作:

routes.MapRoute(
     null, // optional route name 
     "faq", 
     new { controller="Home", action="Faq" }); 

routes.MapRoute(
     null, // optional route name 
     "Boxes/{boxnumber}", 
     new { controller="Boxes", action="Details", boxnumber = ""}); 

// Original route, if needed, should come AFTER more specialized routes. 
routes.MapRoute(
     "Default",            // Route name 
     "{controller}/{action}/{id}",        // URL with parameters 
     new { controller = "Home", action = "Index", id = "" }); // Parameter defaults 

的一些注意事項,可以幫助您更好地理解這種:

  • 控制器和動作參數必須指定,明確地在輸入網址或通過您指定的默認值(如果在傳入URL中丟失)
  • 添加路由的順序是顯着的 bec第一個匹配將用於每個傳入的URL。在上面的例子中,如果原來的路由是先添加的,其他的將永遠不會匹配(因爲原始路由指定了URL的所有參數化部分的默認值)
  • 路由名稱是可選的,只有當你使用路由名稱生成出站URL
+0

第二條路線(對於Boxes)將隱藏Boxes方法中的所有操作。確保你對這些路線有約束 –

+0

你如何添加一個約束? –

1

當你定義一個路由時,它至少必須包含兩條信息:一個控制器和一個動作。這些值可以作爲參數(即URL模式中的「{參數}」部分)或默認值。

上面粘貼的路由示例包含一個操作,但它不包含控制器,因此它不能滿足請求。由於您的控制器名稱是「BoxesController」,因此您可以簡單地將「controller ='Boxes'」添加到該路由的默認值,您會很好。

要實現faq路由,您可以簡單地定義一個URL爲「faq」並且具有默認值controller:「Home」,action =「Faq」的路由。