2012-05-17 5 views
6

Tôi mới sử dụng ASP.NET MVC3.Nhận tuyến đường không chính xác và ActionLink đang tạo liên kết sai

Tôi đã định cấu hình một số tuyến đường trong Global.asax, mà tôi tạo ra một số siêu liên kết bằng phương pháp trợ giúp @ Html.ActionLink.

Tất cả các liên kết đang nhận được render chính xác ngoại trừ một đầu trong các mã dưới đây:

Global.asax

routes.MapRoute(
    null, 
    "Section/{Page}/{SubPage}/{DetailPageName}", 
    new { controller = "Base" } 
    ); 

routes.MapRoute(
    null, 
    "Section/{Page}/{SubPage}", 
    new { controller = "Base", action = "SubPage" } 
    ); 

routes.MapRoute(
    null, 
    "Section/{Page}", 
    new { controller ="Base", action="LandingPage"} 
    ); 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}", // URL with parameters 
    new { controller = "Base", action = "Index" } // Parameter defaults 
    ); 

đang ActionLink

@Html.ActionLink(@subPages.LinkedPageName, "DetailPage", 
    new { 
     Controller = "Base", 
     Page = @ViewBag.PageName, 
     SubPage = @Model.SubPageName, 
     DetailPageName = subPages.LinkedPageName 
    }) 

Trên đây nên chọn tuyến đường hàng đầu tức là:

routes.MapRoute(
    null, 
    "Section/{Page}/{SubPage}/{DetailPageName}", 
    new { controller = "Base" } 
    ); 

Nhưng chọn tuyến đường mặc định!

+0

Tôi nhận thấy không có 'hành động' được xác định trong tuyến đường đầu tiên của bạn. – Jacob

Trả lời

2

Trong định nghĩa tuyến đường này:

routes.MapRoute(
    null, 
    "Section/{Page}/{SubPage}/{DetailPageName}", 
    new { controller = "Base" } 
    ); 

Các điều kiện sau phải được thỏa mãn để cho con đường để phù hợp:

  1. Nếu có một tham số controller truyền vào ActionLink thì giá trị của nó phải Base
  2. Tham số Page phải được chỉ định và không được để trống vì không có giá trị mặc định
  3. Tham số SubPage phải được xác định và phải là không có sản phẩm nào bởi vì nó không có giá trị mặc định
  4. Tham số DetailPageName phải được xác định và phải là không có sản phẩm nào bởi vì nó không có giá trị mặc định

Vì vậy, trong này gọi tới số ActionLink:

@Html.ActionLink(@subPages.LinkedPageName, "DetailPage", 
    new { 
     Controller = "Base", 
     Page = @ViewBag.PageName, 
     SubPage = @Model.SubPageName, 
     DetailPageName = subPages.LinkedPageName 
    }) 

Điều kiện số 1 được giải thích rõ ràng. Nhưng các điều kiện # 2, # 3 và # 4 có thể không được thỏa mãn vì các giá trị của chúng có thể là rỗng.

Và vì bạn tuyên bố rằng tuyến đường kết thúc phù hợp là tuyến mặc định, tôi nghi ngờ tham số Page là rỗng hoặc trống. nghĩa là, @ViewBag.PageName đang trả về giá trị rỗng hoặc trống.

Kiểm tra mã của bạn (có thể trong trình gỡ lỗi hoặc in ra trong chế độ xem) để xem thuộc tính PageName có giá trị hay không.