Установить действие по умолчанию (вместо индекса) для контроллера в ASP.NET MVC 3
У меня есть контроллер под названием Dashboard
с тремя действиями: Summary
, Details
и Status
, ни один из которых не принимает идентификатор или любые другие параметры. Я хочу, чтобы URL /Dashboard
направлялся на Summary
действие контроллера Dashboard
, как это делает /Dashboard/Summary
, но я не могу определить правильный способ добавления маршрута. В Global.asax.cs
у меня есть следующее:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new {controller = "Home", action = "Index", id = UrlParameter.Optional} // Parameter defaults
);
routes.MapRoute(
"/Dashboard",
"Dashboard",
new { controller = "Dashboard", action = "Summary" }
);
Во второй части я также пробовал:
routes.MapRoute(
"/Dashboard",
"{controller}",
new { controller = "Dashboard", action = "Summary" }
);
и
routes.MapRoute(
"/Dashboard",
"{controller}",
new { action = "Summary" }
);
но я всегда получаю 404 при попытке доступа к /Dashboard
. Я почти уверен, что мне что-то не хватает в формате параметров MapRoute
, но я не знаю, что это такое.
Ответы
Ответ 1
Перенесите маршрут своей панели перед маршрутом по умолчанию:
routes.MapRoute(
"Dashboard",
"Dashboard/{action}",
new { controller = "Dashboard", action = "Summary" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new {controller = "Home", action = "Index", id = UrlParameter.Optional} // Parameter defaults
);
Порядок маршрутов меняет все. Также обратите внимание на изменения, внесенные мной в маршрут Dashboard
. Первый параметр - это имя маршрута. Второй - это URL-адрес, который соответствует URL-адресам, начинающимся с Dashboard
, и позволяет выполнять другие действия в вашем контроллере Dashboard
. Как вы можете видеть, по умолчанию будет выполняться действие Summary
.
Ответ 2
Вам нужно объявить последний путь по умолчанию "По умолчанию".
Ответ 3
Это действие по умолчанию для любого контроллера asp.net:
routes.MapRoute("Dashboard", "{controller}/{action}",
defaults: new { controller = "Dashboard", action = "Summary" });