Недавно я обнаружил Области в ASP.NET MVC 4, которые я успешно выполнил, но я столкнулся с проблемами с @Html.ActionLink
помощник в моих взглядах Бритвы. URL-адрес, который генерирует этот помощник, всегда, по-видимому, относится к URL-адресу текущей страницы.
У меня есть мой веб-сайт, настроенный в IIS 7 (Win7) в качестве виртуального каталога приложения в /Foo
.
У меня две зарегистрированные области: Admin и Blogs. У меня есть код по умолчанию в файлах AdminAreaRegistration.cs
и BlogsAreaRegistration.cs
. Я добавил namespaces = new[] { "MvcProject.Controllers" }
к значениям по умолчанию RouteConfig по умолчанию:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {
controller = "Home", action = "Index", id = UrlParameter.Optional,
namespaces = new[] { "MvcProject.Controllers" }
}
);
}
}
Когда я перехожу на домашнюю страницу для своего сайта: http://localhost/Foo
, он правильно загружает страницу "home" для моего сайта. На этом этапе все ссылки действий имеют свои правильные URL-адреса.
Пример кода из MvcProject/Views/Shared/_Layout.cshtml
<h2>Main Navigation</h2>
<ul>
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("Blogs", "Index", "Blogs/Home")</li>
<li>@Html.ActionLink("Admin", "Index", "Admin/Home")</li>
</ul>
Это правильно отображает HTML как:
<h2>Main Navigation</h2>
<ul>
<li><a href="/Foo">Home</a></li>
<li><a href="/Foo/Blogs/Home"></li>
<li><a href="/Foo/Admin/Home"></li>
</ul>
Когда я просматриваю браузер в браузере, например, этот URL правильно загружается в браузере: /Foo/Blogs/Home
.
Теперь ссылки в моей основной навигации меняют URL-адреса на:
<h2>Main Navigation</h2>
<ul>
<li><a href="/Foo/Blogs/Home">Home</a></li>
<li><a href="/Foo/Blogs/Blogs/Home"></li>
<li><a href="/Foo/Blogs/Admin/Home"></li>
</ul>
Обратите внимание, что "Блоги/" добавляется к имени виртуального каталога IIS, поэтому /Foo/Blogs/Home
теперь /Foo/Blogs/Blogs/Home
.
Контроллеры и представления отлично обрабатываются, только вызовы @Html.ActionLink
в моем представлении MvcProject/Views/Shared/_Layout.cshtml
работают не так, как я ожидал.
Похоже, что я пропустил что-то тривиальное, но никакой поиск не получил ответа. Каждое сообщение в блоге и учебник, который я нашел для реализации областей в ASP.NET MVC4, не упоминает об изменениях поведения @Html.ActionLink
.