asp.net mvc路由问题

时间:2011-01-18 14:24:43

标签: c# .net asp.net-mvc asp.net-mvc-routing

我已将此路由添加到我的全局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操作?

2 个答案:

答案 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) {..}

这样你只需要一条路线。