2010-09-21 39 views
29

Một nhiệm vụ đơn giản trong MVC, đôi khi trở thành một thách thức khó khăn.ASP.NET MVC ActionLink bên ngoài khu vực

Vâng, tôi có một Khu vực được gọi là Quản trị viên. Tôi đã có một trang có tên "Bị cấm" bên trong thư mục Chia sẻ trong khu vực này.

Mục tiêu rất đơn giản: Tôi cần tạo Html.ActionLink tạo liên kết để quay lại Trang chủ là OUTSIDE khu vực Quản trị.

Vì vậy, tôi cố gắng, <%= Html.ActionLink("Back","Index",new {controller="Home"})%>, và tạo ra nó:

http://localhost/Admin/Home/Index 

nó sai tôi muốn:

http://localhost/Home/Index 

Làm thế nào tôi có thể tạo ra một liên kết từ một khu vực để các cấu trúc điều khiển mặc định?

Trả lời

51

Hãy thử điều này:

<%= Html.ActionLink("Back", "Index", "Home", new { area = "" }, null) %> 

Khi sử dụng khu vực, bạn nên luôn luôn xác định khu vực của bạn đang kêu gọi trong ActionLinks của bạn bằng cách thêm một giá trị con đường như trên, Nếu liên kết nằm ngoài khu vực (như trong trường hợp của bạn), chỉ cần sử dụng tham số trống cho khu vực.


Có một phần mở rộng tốt đẹp mà tôi thấy cần thiết trong bất kỳ dự án ASP.NET MVC (T4MVC). Nó làm cho ActionLinks của bạn trông sạch sẽ hơn và nó bảo vệ chúng khỏi lỗi.

Vì vậy, các mã trên sẽ giống như thế này:

<%= Html.ActionLink("Back", MVC.Home.Index()) %> 

và khi sử dụng một diện tích:

<%= Html.ActionLink("Some Link", MVC.Admin.SomeController.SomeAction()) %> 

Đó là một phần của dự án MvcContrib trên CodePlex here

Bạn nên cân nhắc việc sử dụng nó.

+0

Tôi đã cố gắng để có được khôn lanh và thêm điều này vào tuyến đường mặc định AreaRegistration của tôi, nhưng điều đó đã không làm việc. Hướng dẫn trực tiếp đến khu vực = "" hoạt động trong một liên kết hành động thường xuyên. Cảm ơn. – kmehta

+1

Và đối với Biểu mẫu, đây là cách bạn sẽ làm. 'Html.BeginForm (" Đăng xuất "," Tài khoản ", mới {area =" "}, FormMethod.Post, mới {id =" logoutForm "}))' –

Các vấn đề liên quan