Каталог пользовательских контроллеров ASP.NET MVC - PullRequest
1 голос
/ 15 июля 2009

Я делаю сайт 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, искали в своих подпапках Foo в Controllers свои контроллеры. Есть ли простой способ сделать это через маршрутизацию, или мне нужно написать свой собственный IControllerFactory?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 15 июля 2009

В итоге я использовал вариант решения, обсуждаемого здесь:

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

1 голос
/ 15 июля 2009

Вы пробовали 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]" }
);
1 голос
/ 15 июля 2009

Я думаю, что вы ищете субконтроллеры .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...