我正在创建一个ASP.NET MVC网站,我有一组相关的表单(让我们称之为Foo)。我组织他们的第一次尝试是拥有这种结构:
Controllers/FooController.cs
......并且有这样的路线:
Foo/{type}/{action}/{id}
不幸的是,由于大约有8个Foo子类型,FooController
变得非常大并且包含它自己的子路由信息。我的下一步就是拥有这种结构:
Controllers/Foo/Form1Controller.cs
Controllers/Foo/Form2Controller.cs
Controllers/Foo/Form3Controller.cs
...
每个表单都有一个控制器,这对我来说更有意义,因为这基本上就是我在应用程序中用于其他表单的布局。
不幸的是,我似乎无法找到任何简单的方法来制作路线:
Foo/{controller}/{action}/{id}
... map to:
Controllers/Foo/{controller}Controller.cs
基本上我想要做的是告诉ASP.NET MVC我希望所有与Foo路由匹配的路由都在Foo
Controllers
子文件夹中查找其控制器。有什么简单的方法可以通过路由来完成,或者我是否需要编写自己的IControllerFactory
?
感谢。
答案 0 :(得分:4)
我最终使用了此处讨论的解决方案的变体:
http://haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx
答案 1 :(得分:1)
我认为你要找的是SubControllers。
答案 2 :(得分:1)
你尝试过RouteConstraint吗?它不是关于目录而是控制器名称,但非常简单 - 你应该尝试:
routes.MapRoute("FooControllers",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" },
new { controller = @"(Form1)|(Form2)|(Form3)" }
);
或:
routes.MapRoute("FooControllers",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" },
new { controller = @"Form[1..8]" }
);