2013-06-18 43 views
0

我有一個在我的Controllers文件夾中有一個「子」文件夾的MVC3項目。現在我想創建一個路由到該子文件夾內的控制器。但我該怎麼做?在子文件夾中的路徑控制器

這似乎並不爲我工作:

context.MapRoute("Test", "SubFolder/Test", 
      new { Controller = "SubFolder/Test", Action = "Index" }); 

所以,子文件夾的名稱爲SubFolder,並在那裏我有一個名爲TestController.cs控制器。我怎樣才能創建一個MapRoute?

+0

你有沒有嘗試使用您的控制器不設置任何特殊的路由,它失敗了嗎? –

回答

5

控制器的子文件夾沒有這種概念。控制器只是C#類,您可以隨時隨地存儲。在您的路由配置,你應該只提控制器名稱:

context.MapRoute(
    "Test", 
    "SubFolder/Test", 
    new { controller = "Test", action = "Index" } 
); 

,如果你想有2個控制器具有相同的名稱,你需要指定命名空間約束定義路由時:

context.MapRoute(
    "Test", 
    "SubFolder/Test", 
    new { controller = "Test", action = "Index" }, 
    new[] { "MvcApplication.Controllers.SubFolder" } 
); 

因此,現在當您導航到http://example.com/subfolder/test時,TestController的Index操作將被執行。

+0

謝謝,那就是訣竅。我想我必須寫下控制器的路徑,但控制器名稱確實夠用了。 – Vivendi

+0

不,第二個參數表示URL模式。 –

+0

如果你想讓2個控制器具有相同的名字,你應該使用我的答案中顯示的名稱空間約束。另一方面,他們應該映射到不同的路線模式。由你決定你的網址的格式。 –

0

如果您使用MvcCodeRouting,您可以根據需要在子文件夾中嵌套控制器,路由將基於命名空間,因此默認情況下將遵循文件夾約定。

using System.Web.Routing; 
using MvcCodeRouting; 

void RegisterRoutes(RouteCollection routes) { 

    routes.MapCodeRoutes(typeof(Controllers.HomeController)); 
} 

Getting Started with MvcCodeRouting

相關問題