我已将此路由添加到我的全局asax。
routes.MapRoute(
"News", // Route name
"News/{timePeriod}/{categoryName}/{page}", // URL with parameters
new { controller = "News", action = "Index",
timePeriod = TimePeriod.AllTime, categoryName = "All", page = 1 },
new { page = @"^\d{1,3}$" }// Parameter defaults
);
routes.MapRoute(
"News2", // Route name
"News/{categoryName}/{page}", // URL with parameters
new { controller = "News", action = "Index",
timePeriod = TimePeriod.AllTime, categoryName = "All", page = 1 },
new { page = @"^\d{1,3}$" }// Parameter defaults
);
问题是网站喜欢/新闻/添加不会工作(除非我添加特定路线) 有没有更好的方法,而无需在全局asax中指定url操作?
答案 0 :(得分:0)
我认为,那会抓住它。但只是,如果你不传递任何额外的参数,如id(因为,那么它与News2路线非常相似)。
routes.MapRoute(
"News0",
"News/{action}",
new { controller = "News", action = "Index" }
);
另外,尝试使用Routing Debugger测试您想要的效果: link
答案 1 :(得分:0)
上面的两条路线将分别路由到新闻控制器并点击“索引”操作。如果您没有索引操作的重载将采用您指定的参数,则路由将无法正常工作。例如,您应该执行以下两项操作:
public ActionResult Index(TimePeriod timePeriod, string categoryName, int page) {..}
public ActionResult Index(string categoryName, int page) {..}
此外,您应该从第二条路线中删除TimePeriod的默认参数,因为您没有在路线本身中使用它:
routes.MapRoute(
"News2", // Route name
"News/{categoryName}/{page}", // URL with parameters
new { controller = "News", action = "Index", categoryName = "All", page = 1 },
new { page = @"^\d{1,3}$" }// Parameter defaults
);
我建议为每个类别执行操作,而不是为每个类别创建路径。您可以简化您的路线:
routes.MapRoute(
"News", // Route name
"News/{action}/{timePeriod}/{page}", // URL with parameters
new { controller = "News", action = "Index", timePeriod = TimePeriod.AllTime, categoryName = "All", page = 1 },
new { page = @"^\d{1,3}$" }// Parameter defaults
);
然后对每个类别采取行动:
public ActionResult All(TimePeriod timePeriod, string categoryName, int page) {..}
public ActionResult Sports(TimePeriod timePeriod, string categoryName, int page) {..}
public ActionResult Weather(TimePeriod timePeriod, string categoryName, int page) {..}
这样你只需要一条路线。