2013-06-18 3 views
0

У меня есть проект MVC3 с папкой «sub» внутри папки Controllers. Теперь я хочу создать маршрут к контроллеру, находящемуся внутри этой подпапки. Но как я могу это сделать?Контроллер маршрута, который находится в подпапке

Это не похоже на работу для меня:

context.MapRoute("Test", "SubFolder/Test", 
      new { Controller = "SubFolder/Test", Action = "Index" }); 

Так имя вложенной папки SubFolder и там у меня есть контроллер с именем TestController.cs. Как я могу создать MapRoute для этого?

+0

ли вы попробуйте использовать контроллер без установки каких-либо специальных маршрутов и это не удалось? –

ответ

5

Нет такого понятия, как подпапка для контроллеров. Контроллеры - это только классы C#, которые вы можете хранить там, где хотите. В конфигурации маршрута следует упомянуть только имя контроллера:

context.MapRoute(
    "Test", 
    "SubFolder/Test", 
    new { controller = "Test", action = "Index" } 
); 

, и если вы хотите иметь 2 контроллеров с тем же именем, необходимо указать ограничение пространства имен при определении маршрута:

context.MapRoute(
    "Test", 
    "SubFolder/Test", 
    new { controller = "Test", action = "Index" }, 
    new[] { "MvcApplication.Controllers.SubFolder" } 
); 

Итак, теперь, когда вы переходите к http://example.com/subfolder/test, будет выполняться действие индекса TestController.

+0

Спасибо, что сделал трюк. Я думал, что мне пришлось записать путь к контроллеру, но имя контроллера было действительно достаточно. – Vivendi

+0

Нет, второй аргумент представляет шаблон URL. –

+0

Вы должны использовать ограничение namespaces, как показано в моем ответе, если вы хотите иметь 2 контроллера с тем же именем. С другой стороны, они должны быть сопоставлены с разными шаблонами маршрутов. Вам решать формат ваших URL-адресов. –

0

Если вы используете MvcCodeRouting, вы можете встраивать контроллеры в подпапки настолько глубоко, как вы хотите, и маршрутизация будет основана на пространствах имен, поэтому по умолчанию будет следовать положению папок.

using System.Web.Routing; 
using MvcCodeRouting; 

void RegisterRoutes(RouteCollection routes) { 

    routes.MapCodeRoutes(typeof(Controllers.HomeController)); 
} 

Getting Started with MvcCodeRouting

Смежные вопросы