2011-06-27 29 views
11

Tôi đã tạo một số loại nội dung tùy chỉnh bao gồm phần tuyến đường để người quản lý nội dung của tôi có thể chỉnh sửa các sên cho các mục. Tôi không có may mắn cấu hình một tuyến đường mà sẽ cho phép một bộ điều khiển của riêng tôi để phục vụ yêu cầu cho các mục này.câu hỏi định tuyến vườn cây ăn quả

Tuyến đường dẫn đến ItemController trong lõi Mô-đun có thể định tuyến có mức độ ưu tiên là 10. Tôi đã thử tạo một tuyến đường sử dụng IRouteConstraint, tương tự như cách mô-đun Blog đạt được những gì tôi muốn làm, ưu tiên thấp hơn nhưng vẫn không có may mắn.

Nếu tôi làm cho URL của mình kết thúc bằng/sau đó tuyến đường tùy chỉnh của tôi được kích hoạt, vì nó không khớp với đường dẫn của các mục nội dung của tôi. Đây không phải là một giải pháp mong muốn. Tôi không thể hiểu tại sao nó sẽ không phát hiện ra con đường tùy chỉnh của tôi trước một con đường thuộc mô-đun định tuyến.

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều, cảm ơn rất nhiều trước.

UPDATE:
Đây là phương pháp GetRoutes tôi từ thực hiện IRouteProvider tôi:

public IEnumerable<RouteDescriptor> GetRoutes() 
    { 
     return new[] { 
      new RouteDescriptor 
      { 
       Priority = 0, 
       Route = new Route(
        "Admin/Jugganort/{controller}/{action}/{id}", 
        new RouteValueDictionary { 
               {"area", "Jugganort"}, 
               {"controller", "Area"}, 
               {"action", "List"} 
              }, 
        new RouteValueDictionary(), 
        new RouteValueDictionary { 
               {"area", "Jugganort"} 
              }, 
        new MvcRouteHandler()) 
      }, 
      new RouteDescriptor 
      { 
       Priority = 9, 
       Route = new Route(
        "{location}/{merchant}/{promotion}", 
        new RouteValueDictionary { 
               {"area", "Jugganort"}, 
               {"controller", "Home"}, 
               {"action", "Index"}, 
               {"merchant", UrlParameter.Optional}, 
               {"promotion", UrlParameter.Optional} 
              }, 
        new RouteValueDictionary { 
         { "location", _routeConstraint } 
        }, 
        new RouteValueDictionary { 
               {"area", "Jugganort"} 
              }, 
        new MvcRouteHandler()) 
      } 
     }; 
    } 

_routeConstraint là một thực hiện đơn giản của IRouteConstraint mà chỉ tìm kiếm một giá trị mã hóa cứng của "newcastle" cho vị trí ở các tuyến đường.

Sự hiểu biết của tôi về RoutePart không chính xác? Các mục đó sẽ luôn được phục vụ từ ItemController của module có thể định tuyến được không? Tùy chọn duy nhất của tôi cho người dùng có thay thế để hiển thị hình dạng tùy chỉnh không?

Diễn đàn về vườn cây ăn quả sẽ là điểm gọi tiếp theo của tôi. Cảm ơn bạn lần nữa vì bất kỳ trợ giúp nào bạn có thể cung cấp.

+0

tôi có thể giúp bạn về vấn đề này nhưng tôi cần thêm chi tiết. làm thế nào để bạn ăn slug, tuyến đường, đường dẫn, tài sản tiêu đề cho mỗi mục nội dung? nếu vấn đề của bạn chỉ là về "/" ở cuối, tôi xin lỗi nhưng tôi nghĩ bạn sẽ phải đối phó với nó. Dù sao, bạn thực sự nên cân nhắc việc hỏi các vấn đề của mình trên các diễn đàn vườn cây ăn quả chính thức, nơi họ (các thành viên chính thức của vườn cây ăn quả) thực sự hoạt động: http://orchard.codeplex.com/discussions/ – Proviste

+0

Bạn có thể đăng RouteProvider.cs của mình không? – mdm

+0

xem cập nhật ở trên @mdm – Brendan

Trả lời

7

Bạn cũng có thể phục vụ các mục đó từ bộ điều khiển của chính bạn. Điều duy nhất cần thiết là một con đường có thể đến được bộ điều khiển của bạn. Sau đó, bạn có thể trả lại khá nhiều thứ bạn muốn :)

Dường như URL của bạn đang được khớp với một số (các) tuyến đường khác. Nếu bạn muốn ghi đè tuyến đường mặc định và đảm bảo rằng tuyến đường của bạn sẽ được so sánh trước, bạn nên chỉ định mức ưu tiên cao hơn (ví dụ: 11). Tuyến đường toàn tuyến ở Orchard.Core.Routable.Routes có mức độ ưu tiên là 10, vì vậy sẽ bắt ngay cả các URL phù hợp với tuyến đường của bạn.

Bạn chưa cung cấp giá trị mặc định cho id trong tuyến đường đầu tiên - điều đó cũng có thể gây ra sự cố. Nếu bạn không chỉ định rõ ràng id trong một URL, nó sẽ không được khớp.

Btw, là Diện tích tên riêng cho bộ điều khiển mặc định trong tuyến đầu tiên hay chỉ là lỗi đánh máy?

+0

Cảm ơn pszmyd, nhưng tuyến đường của tôi vẫn chưa được kích hoạt với mức độ ưu tiên là 11. Nó sẽ bắt trên ~/newcastle/ví dụ, nhưng không phải ~/newcastle là giá trị RoutePart.Path cho nội dung mục. Tôi đang làm điều gì khác sai? Tôi có một AreaController mà tôi sử dụng cho màn hình kiểu quản trị của mình, đây có phải là ý tưởng hay không? – Brendan

+0

Hóa ra 15 là số ma thuật. Nó sẽ là tốt nếu các công cụ thiết kế có thể cho bạn biết những gì tuyến đường yêu cầu hiện tại được phục vụ bởi. Thanks pszmyd, đạo cụ cho blog của bạn cũng có, tôi đã tìm thấy nó rất hữu ích. – Brendan

+0

@Brendan: Route Debugging là thứ mà Orchard thực sự cần. Có một vé mở tại http://orchard.codeplex.com/workitem/17287 - số phiếu bầu nhiều hơn sẽ có cơ hội tốt hơn để được triển khai. @ Pszmyd: Bạn đã viết mô-đun cho gần như mọi thứ khác có thể hiểu tại sao không phải là điều này? :-p – mdm

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