【发布时间】:2012-03-24 13:20:56
【问题描述】:
假设我将以下 URL 请求传递给路由系统,这是可能的最长 URL。
商店/商店内容/宠物/猫/食物/1
其中“1”是页码,pets是根指针
现在我的路线条目如下所示:
routes.MapRoute(
"StoreContent", // Route name
"{controller}/{action}/{rootpointer}/{category}/{category2}/{page}", // URL with parameters
new { rootpointer = UrlParameter.Optional, category= UrlParameter.Optional, category2 = UrlParameter.Optional, page = UrlParameter.Optional},
new { controller = "Store", action = "StoreContent" });
我的方法是这样的:
public PartialViewResult StoreContent(string rootpointer, string category, string category2, int page) {}
问题是,当我传递类似 store/storecontent/pets/1 这样的 URL 时,类别会被分配“页面”值,这是可以理解的,因为页面现在位于保留的路由段的位置对于类别和路由系统无法判断哪个值属于页面以及哪个属于类别,因为这些是匿名类型。
有什么办法可以解决这个问题,我知道这可以通过使用 catchall 并解析它来提取值来手动完成,但是有没有更优雅的解决方案,不需要任何手动干预?如果我的 URL 反映了它,我也可能只使用类似 /page-{page}/ 的东西,那么路由系统应该为页面匿名类型选择它并将其值正确分配给方法上的页面参数?
【问题讨论】:
-
/{controller}/{action}/{rootpointer}/{categories}/{page}用连字符划分类别呢?
标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing