2011-08-08 24 views
7

Tôi có một liên kết trong một trang mà đi như thế này:Url.Action() bao gồm các thông số không mong muốn, cố gắng để có thêm quyền kiểm soát

Url.Action("List", "Item", new { category = "seasons" }) 

Các Route phù hợp với trang đó cũng có một parentGroup và nhóm thông số

Ex:/Seasons/Moober/xanh/1 ->/{loại}/{parentGroup}/{nhóm}/{id}

vấn đề là khi tôi trên trang đó và sử dụng Url.Action, nó thêm tất cả các giá trị tuyến bị thiếu ngay cả khi tôi cố gắng tạo liên kết đến các danh mục/{category}, nó vẫn sẽ thêm parentGroup và nhóm.

Tôi đã tìm thấy this post, mà đề nghị làm việc đó như thế này:

Url.Action("List", "Item", new { category = "seasons", group = "", parentGroup = "" }) 

Nhưng nó không hoạt động đối với tôi vì nó loại bỏ chúng khỏi url của tôi, nhưng cho biết thêm họ như các thông số: /Seasons parentGroup = Moober & nhóm = Xanh

Tôi đang sử dụng MVC3. Có cách nào để buộc Url.Action() chỉ sử dụng các tham số được cung cấp hoặc hủy bỏ những thông số tôi không muốn?

Đây là các tuyến đường.

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

routes.MapRoute(
    "ItemFromCategoryParentGroupSubGroup", // Route name 
    "{category}/{parentGroup}/{group}/{id}/{language}", // URL with parameters 
    new { controller = "Item", action = "Show", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults 
    new 
    { 
     category = _validCategory, 
     parentGroup = _validGroup, 
     group = _validChildGroup, 
     id = _validItemInChildGroup 
    } 
); 

routes.MapRoute(
    "ItemListFromParentGroup", // Route name 
    "{category}/{parentGroup}/{group}/{language}", // URL with parameters 
    new { controller = "Item", action = "List", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults 
    new 
    { 
     category = _validCategory, 
     parentGroup = _validGroup, 
     group = _validChildGroup 
    } 
); 

routes.MapRoute(
    "ItemWithGroup", // Route name 
    "{category}/{group}/{id}/{language}", // URL with parameters 
    new { controller = "Item", action = "Show", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults 
    new 
    { 
     category = _validCategory, 
     group = _validGroup, 
     id = _validItemInGroup 
    } 
); 

routes.MapRoute(
    "ItemListWithGroup", // Route name 
    "{category}/{group}/{language}", // URL with parameters 
    new { controller = "Item", action = "List", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults 
    new 
    { 
     category = _validCategory, 
     group = _validGroup 
    } 
); 

routes.MapRoute(
    "ItemListFromCategory", // Route name 
    "{category}/{language}", // URL with parameters 
    new { controller = "Item", action = "List", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults 
    new 
    { 
     category = _validCategory 
    } 
); 

Edit:

Tôi có một cách giải quyết cho những khoảnh khắc đó trông như thế này: Url.RouteUrl ("ItemListFromCategory") tôi về cơ bản buộc cùng một tuyến đường mà là vụ phải được kết hợp bởi Url.Action ("List", "Item", new {category = "seasons"}) Và lần này không có tham số nào được thêm tự động.

Vấn đề với điều này là tôi buộc phải sử dụng các tuyến đường được đặt tên.

+0

bạn có thể hiển thị cho chúng tôi tuyến đường của bạn không? – frennky

+0

Tôi có thể, tôi chỉ hy vọng họ không quá dài. – Emanuel

Trả lời

0

Thử khai báo các tham số khác dưới dạng UrlParameter.Optional trong quá trình đăng ký tuyến đường và đặt giá trị mặc định cho các thông số đó trong hành động của bạn. Ví dụ.

MyAction(string category, string group = "", parentGroup = 0) 

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn bạn, tôi đã thử không thành công. – Emanuel

3

Thay đổi tuyến đường của bạn

routes.MapRoute(
    "SomeRoute", // Route name 
    "/{category}/{parentGroup}/{group}/{id}", 
    new { 
     controller = "DefaultController", 
     action = "DefaultAction", 
     parentGroup = UrlParameter.Optional 
     group = UrlParameter.Optional 
     id= UrlParameter.Optional 
    } 
); 

Hãy parentGroup, parentGroup, nhóm optional.

+0

bạn không thể có nhiều hơn một tham số tùy chọn, trừ khi bạn làm như sau: http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters .aspx – frennky

+0

Tôi đã sử dụng cách giải quyết này http: //weblogs.asp.net/imranbaloch/archive/2010/12/26/routing-issue-in-asp-net-mvc-3-rc-2.aspx cho nhiều tham số tùy chọn và liên tiếp, tuy nhiên url được tạo vẫn giống nhau ở cuối, Tôi sẽ cố gắng trộn nó với bản sửa lỗi được đề xuất của frennky. – Emanuel

+0

Có, thật đáng buồn điều này đã không hoạt động. – Emanuel

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