Каталог пользовательского контроллера ASP.NET MVC

Я делаю веб-сайт 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?

Спасибо.


person cdmckay    schedule 14.07.2009    source источник
comment
Не должны ли Controllers/Foo/Form1Controller.aspx быть Controllers/Foo/Form1Controller.cs? Если только я что-то не упустил.   -  person mxmissile    schedule 15.07.2009
comment
Правильно, но вопрос все тот же. сейчас исправлю.   -  person cdmckay    schedule 15.07.2009


Ответы (3)


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

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

person cdmckay    schedule 14.07.2009
comment
Хорошая простая находка. Предполагается, что он будет встроен в следующую версию MVC. - person mxmissile; 15.07.2009
comment
Да, я был очень удивлен, что это было так сложно. Тем не менее, я думаю, что это только в 1.0. - person cdmckay; 15.07.2009
comment
@cdmckay Не то чтобы я думал, что сайт Haacked когда-нибудь выйдет из строя или исчезнет, ​​но не могли бы вы подвести итоги в Stackoverflow, чтобы обеспечить согласованность контента? - person Nate-Wilkins; 19.05.2014

Я думаю, что вы ищете SubControllers.

person mxmissile    schedule 14.07.2009

Вы пробовали RouteConstraint? Речь идет не о каталогах, а об именах контроллеров, но очень просто - вы должны попробовать:

routes.MapRoute("FooControllers",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = "" },
    new { controller = @"(Form1)|(Form2)|(Form3)" }
);

or:

routes.MapRoute("FooControllers",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = "" },
    new { controller = @"Form[1..8]" }
);
person eu-ge-ne    schedule 14.07.2009
comment
Это по-прежнему не позволит мне иметь формы Foo в подпапке в разделе «Контроллеры». - person cdmckay; 15.07.2009