代码之家  ›  专栏  ›  技术社区  ›  cdmckay

ASP.NET MVC自定义控制器目录

  •  1
  • cdmckay  · 技术社区  · 15 年前

    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}
    

    …映射到:

    Controllers/Foo/{controller}Controller.cs
    

    基本上,我想做的是告诉ASP.NETMVC,我希望所有匹配Foo路由的路由都在 Foo 的子文件夹 Controllers 为他们的控制器。有没有什么简单的方法可以通过路由实现,或者我需要自己编写 IControllerFactory ?

    谢谢

    3 回复  |  直到 15 年前
        1
  •  4
  •   cdmckay    15 年前

    我最终使用了这里讨论的解决方案的一个变体:

    http://haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx

        2
  •  1
  •   mxmissile    15 年前

    我想你要找的是 SubControllers .

        3
  •  1
  •   eu-ge-ne    15 年前

    你试过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]" }
    );