Области 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, который у меня нет.

Если у кого-то есть предложение о том, как разрешить контроллерам, не названным по умолчанию, по умолчанию, ответьте. Благодаря

Ответ 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
        );