ASP MVC Области и ActionLink - PullRequest
       21

ASP MVC Области и ActionLink

13 голосов
/ 19 мая 2009

Я работаю над новым проектом, в котором хочу использовать идею Фила Хаака Ареаса (1) + твик Стива Сандерсона (2) У меня есть простое корневое представление с ссылкой действия для просмотра области (Foo). Сгенерированный URL имеет правильную область, но в конце он добавляет корневой контроллер (Bar). Вот мой код вида root:

<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"?

(1): haacked.com / archive / 2008/11/04 / areas-in-aspnetmvc.aspx

(2): blog.codeville.net / 2008/11/05 / app-area-in-aspnet-mvc-take-2 /

Ответы [ 3 ]

20 голосов
/ 19 мая 2009

Я нашел решение. Я не думаю, что это уместно, поэтому я попрошу об улучшении. Указав имя контроллера, я могу получить 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 по умолчанию, ответьте. Спасибо

2 голосов
/ 19 мая 2009

Чтобы не иметь Home в качестве имени контроллера по умолчанию, просто измените маршрут по умолчанию .

0 голосов
/ 27 июня 2013

@ Джо

В вашем файле 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
        );
...