c# — Cách sử dụng chính xác Html.ActionLink với ASP.NET MVC 4 Area

Gần đây tôi đã phát hiện ra Các khu vực trong ASP.NET MVC 4 , mà tôi đã triển khai thành công, nhưng tôi đang gặp rắc rối với trình trợ giúp @Html.ActionLink trong chế độ xem Dao cạo của tôi. URL mà trình trợ giúp này tạo ra dường như luôn liên quan đến URL của trang hiện tại.

Tôi có cấu hình trang web của mình trong IIS 7 (Win7) dưới dạng thư mục ảo Ứng dụng tại /Foo.

Tôi có hai khu vực được đăng ký: Quản trị viên và Blog. Tôi có mã mặc định trong các tệp AdminAreaRegistration.csBlogsAreaRegistration.cs. Tôi đã thêm namespaces = new[] { "MvcProject.Controllers" } vào mặc định của RouteConfig mặc định:

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" }
            }
        );
    }
}

Khi tôi truy cập trang chủ cho trang web của mình: http://localhost/Foo, nó sẽ tải chính xác trang “nhà” cho trang web của tôi. Tại thời điểm này, tất cả các liên kết hành động có URL chính xác của họ.

Mã mẫu từ 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>

Đây là kết xuất chính xác HTML dưới dạng:

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

Ví dụ: khi tôi điều hướng trong trình duyệt tới “Blog”, URL này sẽ tải chính xác trong trình duyệt: /Foo/Blogs/Home.

Bây giờ các liên kết trong điều hướng chính của tôi thay đổi URL của chúng thành:

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

Lưu ý rằng “Blogs /” được gắn vào tên thư mục ảo IIS, do đó /Foo/Blogs/Home hiện là /Foo/Blogs/Blogs/Home.

Các bộ điều khiển và chế độ xem hiển thị tốt, đó chỉ là các cuộc gọi đến @Html.ActionLink trong chế độ xem MvcProject/Views/Shared/_Layout.cshtml của tôi không hoạt động như tôi mong đợi.

Cảm giác như tôi đang thiếu một cái gì đó tầm thường, nhưng không có lượng tìm kiếm nào đưa ra câu trả lời. Mỗi bài đăng và hướng dẫn blog tôi đã tìm thấy để triển khai Các khu vực trong ASP.NET MVC4 không đề cập đến các thay đổi về cách hành xử của @Html.ActionLink.