2010-02-16 29 views
8

Mã này là bên trong trang chủ:Set khu vực mặc định - Tránh `, mới {diện tích = ""}` trên mỗi liên kết trên trang web

<li><a href="<%=Url.Action("Action", "Controller") %>">Main site link</a></li> 
<li><a href="<%=Url.Action("AreaAction", "AreaController", new {area = "Area"}) %>">Area link</a></li> 

Tất cả các liên kết hoạt động tốt cho đến khi tôi sẽ truy cập vào Liên kết khu vực. Khi tôi đến đó tất cả các tuyến đường của khu vực chính không hoạt động.

Để khắc phục điều đó tôi có thể sử dụng này:

<li><a href="<%=Url.Action("Action", "Controller", new {area = ""}) %>">Main site link</a></li> 

Câu hỏi của tôi là, liệu có một cách để tránh , new {area = ""} trên mỗi liên kết trong đến các trang web chính?

Rất khó chịu khi có liên kết này trên mọi liên kết trên trang web.

Trả lời

10

Tác vụ Url có liên quan đến vị trí của liên kết. Vì vậy, new {area = ""} không cho biết cuộc gọi Url.Action rằng không có khu vực, nó nói với nó để sử dụng khu vực gốc gốc. Nếu bạn bỏ qua new {area = ""} từ cuộc gọi Url. Cuộc gọi sẽ cố gắng tạo url cho hành động được chỉ định trong bộ điều khiển được chỉ định trong khu vực hiện tại hiện tại ("Khu vực" nằm trong trường hợp của bạn).

Do đó, không thể tránh khỏi nếu bạn muốn liên kết từ một vùng con đến vùng gốc.

3

Tôi vẫn không biết nếu bạn đang sử dụng các phương pháp MVC chuẩn lib sau đó bạn có thể.

Phương pháp MvcFutures gọi ExpressionHelper.GetRouteValuesFromExpression(), tìm kiếm ActionLinkAreaAttribute trên bộ điều khiển để xác định khu vực. Vì vậy, bạn có thể trang trí các bộ điều khiển của bạn trong "khu vực" chính của bạn như sau:

[ActionLinkArea("")] 
[HandleError] 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

Các liên kết hành động nên được tạo ra một cách chính xác bằng cách sử dụng cú pháp tiêu chuẩn:

<%= Html.ActionLink<HomeController>(c => c.Index(), "Home") %> 
Các vấn đề liên quan