【问题标题】:ASP.NET MVC Custom Controller directoryASP.NET MVC 自定义控制器目录
【发布时间】:2009-07-14 20:17:05
【问题描述】:

我正在制作一个 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}

...映射到:

Controllers/Foo/{controller}Controller.cs

基本上我想要做的是告诉 ASP.NET MVC,我希望所有与 Foo 路由匹配的路由在 ControllersFoo 子文件夹中查找它们的控制器。有没有简单的方法通过路由来做到这一点,还是我需要自己写IControllerFactory

谢谢。

【问题讨论】:

  • Controllers/Foo/Form1Controller.aspx 应该是 Controllers/Foo/Form1Controller.cs 吗?除非我错过了什么。
  • 对对对,但问题还是一样。我现在就修。

标签: c# .net asp.net asp.net-mvc routing


【解决方案1】:

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

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

【讨论】:

  • 好简单的发现。应该会在 MVC 的下一个版本中构建。
  • 是的,我很惊讶它会这么复杂。但是,我猜它只有 1.0。
  • @cdmckay 我认为 Haacked 的网站不会关闭或消失,但您能否在 Stackoverflow 上进行总结以保持内容一致?
【解决方案2】:

我想你要找的是SubControllers

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这仍然不允许我将 Foo 表单放在 Controllers 下的子文件夹中。
    猜你喜欢
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2016-09-09
    相关资源
    最近更新 更多