Области ASP MVC и ActionLink
Я работаю над новым проектом, в котором хочу использовать идею Фила Хаак (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/Foo/Bar
Любая идея, почему там находится "/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/
Ответы
Ответ 1
Я нашел решение. Я не думаю, что это уместно, поэтому я попрошу улучшения. Указав имя контроллера, я могу правильно сформировать 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
Почему это проблема? Phil demo использует контроллер с именем HomeController. Я не знаю (потому что не могу проследить), как метод Html.ActionLink() идет о построении URL-адреса; но похоже, что он полагается на стандартный файл HomeController, который у меня нет.
Если у кого-то есть предложение о том, как разрешить контроллерам, не названным по умолчанию, по умолчанию, ответьте. Благодаря
Ответ 2
Чтобы не было Home
в качестве имени контроллера по умолчанию, просто измените маршрут по умолчанию.
Ответ 3
@Joe
В вашем файле App_Start/RouteConfig.cs вам нужно изменить значение для контроллера по умолчанию из Home, чтобы вы хотели:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "NAME_OF_YOUR_HOME_CONTROLLER", action = "Index", id = "" } // Parameter defaults
);