Я согласен с @Tim, что вы должны использовать один контроллер. Контроллер - это логическая группа действий; например, операции CRUD для Foo. NerdDinner является хорошим примером этого.
Я не согласен с маршрутами. Вы можете делать все что угодно с маршрутизацией; но это должно быть значимым для пользователя. Вероятно, у вас есть только один маршрут, похожий на тот, что приведен ниже.
routes.MapRoute("Default", //RouteName
"{controller}/{action}/{id}", //RouteUrl
new { //RouteDefaults
controller = "Home",
action = "Index",
id = UrlParameter.Optional}
)
Вы можете выбрать нужные маршруты, используя один контроллер.
Ваши желаемые URL:
MyApp / Home
MyApp / Резюме / prop1 / prop2
MyApp / Detail / prop1 / prop2 / prop3
Настройка контроллера:
public class HomeController : Controller
{
public ActionResult Index() { ... }
public ActionResult Summary() { ... }
public ActionResult Details() { ... }
}
Настройка маршрутизации:
routes.MapRoute("Home-Index", //RouteName
"myapp/Home", //RouteUrl
new { //RouteDefaults
controller = "Home",
action = "Index"});
routes.MapRoute("Home-Summary", //RouteName
"myapp/Summary/prop1/prop2", //RouteUrl
new { //RouteDefaults
controller = "Home",
action = "Summary",
prop1 = UrlParameter.Optional,
prop2 = UrlParameter.Optional});
routes.MapRoute("Default", //RouteName
"{controller}/{action}/{id}", //RouteUrl
new { //RouteDefaults
controller = "Home",
action = "Index",
id = UrlParameter.Optional}
)
Теперь следует отметить несколько важных вещей:
Маршрутизация работает как оператор switch, первый соответствующий URL-адрес
тот, который он будет использовать, поэтому у вас есть последний как последний
один.
URL-адрес, определенный в вашем маршруте карты, может быть любым, что вы хотите. Это
не должен совпадать с контроллером, потому что как только вы удалите
заполнители ({controller} и т. д.), которые он использует по умолчанию для
навигации. Таким образом, URL-адрес маршрута Home-Index может быть myapp / foo / bar / baz
и id все равно приведет вас к действию Home index.
Заполнители работают автоматически. Мне не удалось найти хороший ресурс, объясняющий, как работает маршрут по умолчанию.
Надеюсь, это поможет.