Wie man Html.ActionLink mit ASP.NET MVC 4 Bereichen richtig benutzt

Ich vor kurzem entdeckt habe Bereiche, in ASP.NET MVC 4, die ich erfolgreich umgesetzt haben, aber ich bin in Schwierigkeiten mit der @Html.ActionLink Helfer in meinem Razor-Ansichten. Die URL dieser Helfer generiert immer zu sein scheint, relativ zur URL der aktuellen Seite.

Ich habe meine web-site in IIS konfiguriert 7 (Win7) als eine Anwendung das virtuelle Verzeichnis an /Foo.

Ich habe zwei Bereichen registriert: Admin und Blogs. Ich habe die Standard-code in der AdminAreaRegistration.cs und BlogsAreaRegistration.cs - Dateien. Ich fügte namespaces = new[] { "MvcProject.Controllers" } den Vorgaben der Standard-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" }
            }
        );
    }
}

Wenn ich auf die Startseite meiner Website: http://localhost/Foo es korrekt lädt die "home" - Seite für meine Website. An dieser Stelle, all die action, die links, die haben Ihre richtigen URLs.

Beispielcode aus 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>

Dies ist korrekt Rendern der HTML-als:

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

Wenn ich im browser navigieren Sie zu "Blogs" zum Beispiel, diese URL lädt korrekt in den browser: /Foo/Blogs/Home.

Nun die links in meiner main-navigation ändern Ihre URLs:

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

Beachten Sie, dass "Blogs/" angefügt, um die virtuelle IIS-Verzeichnis-Namen, so dass /Foo/Blogs/Home ist jetzt /Foo/Blogs/Blogs/Home.

Den Controllern und views Rendern in Ordnung, es ist nur die Aufrufe @Html.ActionLink in meinem MvcProject/Views/Shared/_Layout.cshtml Sicht nicht so funktioniert, wie ich es erwartet habe.

Es fühlt sich an wie ich bin fehlt etwas trivial, aber keine Höhe suchen, kommen mit einer Antwort. Jedem blog-post und das tutorial habe ich gefunden, die für die Umsetzung in den Bereichen ASP.NET MVC4 macht keine Erwähnung von änderungen in der, wie @Html.ActionLink verhält.

InformationsquelleAutor der Frage Greg Burghardt | 2014-03-14

Schreibe einen Kommentar