Области ASP MVC и ActionLink
-
22-08-2019 - |
Вопрос
Я работаю над новым проектом, в котором хочу использовать идею Фила Хаака Areas (1) + настройку Стива Сандерсона (2).У меня есть простое корневое представление со ссылкой на действие для просмотра области (Foo).Созданный URL-адрес имеет правильную область, но в конце добавляется корневой контроллер (Bar).Вот мой код корневого представления:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Index</h2>
<%= Html.ActionLink("Foo Index Page", "Index", new { area="Foo" } )%>
</asp:Content>
и вот URL-адрес, который он генерирует:
локальный хост: 6494/Фу/Бар
Есть идеи, почему там находится «/Bar»?
(1): haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx
(2): blog.codeville.net/2008/11/05/app-areas-in-aspnet-mvc-take-2/
Решение
Я нашел решение.Я не думаю, что это уместно, поэтому попрошу улучшения.Указав имя контроллера, я могу правильно сформировать URL-адрес.И.Е.
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Index</h2>
<%= Html.ActionLink("Foo Index Page", "Index", new { area="Foo", controller="Baz" } )%>
</asp:Content>
Как только я это сделал, URL-адрес был правильным.
локальный хост: 6494/Foo
Почему это проблема?В демо Фила используется контроллер с именем HomeController.Я не знаю (потому что не могу отследить), как метод Html.ActionLink() создает URL-адрес;но похоже, что он полагается на существующий по умолчанию вариант HomeController, которого у меня нет.
Если у кого-то есть предложения о том, как разрешить использовать контроллеры с именем «Home» по умолчанию, ответьте.Спасибо
Другие советы
Не иметь Home
в качестве имени контроллера по умолчанию, просто изменить маршрут по умолчанию.
@Джо
В файле App_Start/RouteConfig.cs вам нужно изменить значение контроллера по умолчанию с «Домой» на то, что вам нравится:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "NAME_OF_YOUR_HOME_CONTROLLER", action = "Index", id = "" } // Parameter defaults
);