2009-05-19 2 views
13

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

<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/

ответ

20

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

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

0

@Joe

В вашем 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 
     ); 
Смежные вопросы