2011-11-29 22 views
5

Tôi muốn URL của tôi để sử dụng quy ước:Tuyến đường của tôi có thể sử dụng các thông số tùy chọn ở giữa URL bằng cách sử dụng ASP MVC3 như thế nào?

/{controller}/{id}/{action} 

hơn

/{controller}/{action}/{id} 

Tôi đã cố gắng thiết lập một lộ trình như sau:

routes.MapRoute(
      "Campaign", 
      "{controller}/{action}/{id}", 
      new { controller = "Campaign", action = "Index", id = UrlParameter.Optional } 
     ); 

Nhưng điều này không làm việc bởi vì tôi không thể thực hiện tham số id tùy chọn.

Các URL sau làm việc:

/campaign/1234/dashboard 
/campaign/1234/edit 
/campaign/1234/delete 

Nhưng các URL không:

/campaign/create 
/campaign/indexempty 

MVC chỉ gọi Index cho cả hai. Tôi đang làm gì sai?

Trả lời

7

Tôi nghĩ bạn có thể cần hai tuyến đường riêng biệt cho việc này.

routes.MapRoute(
      "CampaignDetail", 
      "{controller}/{id}/{action}", 
      new { controller = "Campaign", action = "Index" } 
     ); 

routes.MapRoute(
      "Campaign", 
      "{controller}/{action}", 
      new { controller = "Campaign", action = "Index" } 
     ); 
+0

Điều đó đã hiệu quả! Sửa đổi nhỏ mã của bạn - Tôi đã đặt tên cho tuyến đầu tiên là "CampaignDetail" để nó không xung đột với tuyến đường thứ hai. – parleer

+0

Ồ, tôi đã bỏ lỡ điều đó. Tôi rất vui vì nó đã giúp. –

+0

Một điều nữa - Có '{controller}/{id}/{action}' đã can thiệp vào tuyến đường mặc định của tôi. Tôi đã có thể khắc phục điều này bằng cách sử dụng rõ ràng từ ** chiến dịch ** trong url của tôi. tức là 'chiến dịch/{id}/{hành động}'. – parleer

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