2009-03-03 28 views
5

Tôi đã thiết lập dự án ASP.NET MVC và mọi thứ đều hoạt động tốt nhưng tôi gặp sự cố với định tuyến. My Global.asax trông giống như sau:Định tuyến URL ASP.NET MVC không cung cấp cho tôi URL đẹp

public static void RegisterRoutes(RouteCollection routes) { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

Vì vậy, không có gì khác thường. Vấn đề của tôi là khi tôi liên kết với một bộ điều khiển/hành động/params với một Html.ActionLink như vậy:

<%= Html.ActionLink("My link", "SomeAction", "SomeController", new {param="someParam"})%> 

nó sẽ tạo ra (ít nhất là những gì làm cho cảm giác trong đầu của tôi) một liên kết như: http://www.localhost/SomeController/SomeAction/someParam.

Nhưng thay vì nó tạo ra một liên kết như thế này: http://localhost/SomeController/SomeAction?param=someParam

Nếu tôi tự tạo một liên kết liên kết đến kết quả dự kiến ​​(SomeController/SomeAction/someParam) sau đó bộ điều khiển đúng và hành động được gọi là, nhưng các tham số định nghĩa trong phương thức hành động luôn là null.

Bất kỳ ý tưởng nào?

Trả lời

4

Tôi nghĩ rằng liên kết đó sẽ chỉ sử dụng các tuyến đường mặc định như bạn mong đợi nếu tên tham số là id thay vì param. Bạn sẽ phải tạo một tuyến đường khác nếu bạn muốn cung cấp một số thông số khác ở đó.

+0

Hmmm, vậy điều này có nghĩa là tôi phải chỉ định quy tắc định tuyến mới cho mỗi hành động điều khiển mới yêu cầu một tập hợp các tham số khác? Điều này sẽ dẫn đến một số lượng lớn các quy tắc định tuyến cho một ứng dụng doanh nghiệp. Không có cách tiếp cận năng động hơn thế? – Erik

+1

Nếu điều này thực sự năng động, bạn sẽ không bị mất an toàn loại, an toàn thông số và kiểm tra? – bzlm

5

thử thêm:

routes.MapRoute(
        "Default",                        // Route name 
        "{controller}/{action}/{param}",             // URL with parameters 
        new { controller = "Home", action = "Index", param = "" } // Parameter defaults 
      ); 
Các vấn đề liên quan