Làm thế nào để chỉ định một tên khu vực trong một liên kết hành động?


156

Tôi có một trang chính được chia sẻ mà tôi đang sử dụng từ 2 khu vực khác nhau trong ứng dụng mvc 2 của mình. Trang chính có một liên kết hành động hiện chỉ định bộ điều khiển và hành động, nhưng tất nhiên liên kết đó không hoạt động nếu tôi ở sai khu vực. Tôi thấy không có quá tải cho các liên kết hành động có một tham số khu vực, nó có thể làm được không?

Câu trả lời:


245

Tìm ra..

Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})

3
@ Pure.Krom - vâng. Không có gì trực quan về nó!
Jeremy

3
Đảm bảo không có khoảng trắng trước hoặc sau Tên khu vực. Nếu không, nó sẽ bỏ qua nó ... và sau đó sẽ khiến bạn tự hỏi bốn giờ có gì không ổn .. giống như tôi.
Piotr Kula

Làm thế nào để bạn thêm các tham số trong đó?
Yorro

Làm thế nào để điều này trông giống như được dịch vào liên kết? Ý tôi là - khi biểu mẫu được hiển thị và trả lại cho khách hàng.
FrenkyB

79

Một cái gì đó tôi gặp phải ngay sau đó, mà tôi tưởng tượng những người khác có thể gặp phải: Nếu bạn cần liên kết từ trong một khu vực đến một hành động không nằm trong một khu vực, bạn vẫn cần chỉ định Khu vực là chuỗi trống.

Chẳng hạn, tôi đã di chuyển một số mã MVC vào một khu vực và thấy rằng tôi cần cập nhật các url trong trang chính đã tham chiếu các trang khác trên trang web.

Để chỉ định một url đến một cái gì đó không nằm trong một khu vực, hãy sử dụng

Html.ActionLink("home", "Index", new { area = "", controller = "Home" })

4
Đây là một mẹo rất tốt! Nhưng nó mang lại kết quả không như mong đợi với MVC 2 .. Hiệu chỉnh nhỏ - Html.ActionLink ("home", "Index", new {area = "", controller = "Home"})
Alexander Beletsky

15

Sử dụng:

 Html.ActionLink("Text", "ActionName", "ControllerName", new { Area = "AreaName" }, null)

Lưu ý : Tham số thứ 4 là để vượt qua tuyến đường Values, nếu bạn truyền tham số trống, nó sẽ xem xét cấu trúc gốc và nếu bạn vượt qua giá trị phù hợp, nó sẽ sử dụng nó làm vùng.

Cũng đừng quên sử dụng nullhoặc new{}làm tham số thứ 5 vì truyền nullhoặc new {}trong khi tạo liên kết hành động sẽ không làm quá tải phương thức cho (text,action,controller,route data)hoặc (text,action,controller,route data,html attribute)vì vậy hãy sử dụng phương thức thích hợp


11

Trong MVC2, area="root"làm việc cho tôi như dưới đây

Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})

6

Một mẹo gọn gàng bạn có thể làm nếu bạn đang sử dụng một khu vực rất nhiều trong Chế độ xem là xác định nó là một biến ở trên cùng:

@{ var awesomeArea = new { area = "Awesome" }; }

@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)

4

Đây là những gì tôi đã đưa ra như một giải pháp để cho phép người dùng liên kết với các hệ thống xác thực được xây dựng trước.

Mỗi khu vực của tôi có một phiên bản của tệp _LoginPartial.cshtml.

Tôi có thể có thể khiến ứng dụng sử dụng một phiên bản duy nhất của tệp, tuy nhiên tôi vẫn gặp lỗi khi cố gắng sử dụng một phần đăng nhập.

Nó chỉ là một sửa đổi nhỏ cho đăng nhập ban đầu được tạo, nhưng nó dường như hoạt động tốt khi được sử dụng trong các khu vực cụ thể.

Đây là mã được sử dụng trong tất cả chúng:

@if (Request.IsAuthenticated)
{
    <text>
    Hello, @Html.ActionLink(User.Identity.Name, "Manage", "Account", new { area = "" }, htmlAttributes: new { @class = "username", title = "Manage" })!
    @using (Html.BeginForm("LogOff", "Account", new { area = "" }, FormMethod.Post, new { id = "logoutForm" }))
 {
        @Html.AntiForgeryToken()
        <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
 }
    </text>
}
else
{
    <ul>
        <li>@Html.ActionLink("Register", "Register", "Account", new { area = "" }, htmlAttributes: new { id = "registerLink" })</li>
        <li>@Html.ActionLink("Log in", "Login", "Account", new { area = "" }, htmlAttributes: new { id = "loginLink" })</li>
    </ul>
}

Hoàn toàn thiết lập công htmlAttributes:việc rất tốt để sử dụng nhiều tham số.
Travis J

2

Nếu bạn không thể sử dụng liên kết ứng dụng web độc lập như Giới thiệu, Trang chủ, Contac, v.v. từ khu vực. Bạn đổi dòng

@Html.ActionLink("Ana Sayfa", "Index", "Home", new { area = "" }, new {})

từ

Lượt xem \ Shared_Layout.cshtml


1

Trong ứng dụng ASP Net Core của tôi, tôi chỉ cần thêm khu vực vào các thuộc tính html như vậy:

@Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" , id = @Model.ID, name = @Model.name })

0

Sử dụng

@Html.ActionLink("DisplayText", "ActionName", "ControllerName", new { area = "AreaName"}, null)

Sẽ đạt được những gì bạn đang có sau.

DisplayText là thứ sẽ hiển thị (Giống như <a href="#">DisplayText</a>), ActionName là phương thức được gọi trong bộ điều khiển và Trình điều khiển rõ ràng là bộ điều khiển bạn muốn gọi! Tham số tiếp theo là 'Giá trị tuyến' nơi bạn sẽ thêm khu vực của mình. Nếu bạn đang trong một Diện tích và muốn trở lại điều hướng đến thư mục gốc của bạn Home/Indexví dụ, bạn sẽ để lại những giá trị như một chuỗi rỗng, ví dụ new { area = ""}. Giá trị cuối cùng là 'Thuộc tính Html' và nơi bạn sẽ thêm một lớp nếu bạn muốn và sẽ là một nullnếu không có bất kỳ thuộc tính nào để thêm. Nhưng như tham số cuối cùng được xem là 'Thuộc tính Html'; để các giá trị tuyến đường được công nhận, điều này nên đượcnull

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.