如何在具有其他参数的路由上实现分页?

时间:2015-02-21 06:45:06

标签: asp.net-mvc asp.net-mvc-routing paging

我知道如何在一条路线上实现分页,例如/ Dinners / Page / 1。我的问题是我有一份文章清单。这些文章分为类别和子类别。

如果未指定类别/子类别,我想返回所有文章。 如果仅提供类别,我提供该类别中的所有文章 如果提供了类别和子类别,我只想要子类别中的文章。

我的工作没有问题。然后我想添加分页。我想要一条可以执行以下操作的路线: domain.com/6 - 转到所有文章的第6页 domain.com/category/2 - 转到类别文章的第2页 domain.com/category/subcategory/3 - 转到子类别文章的第3页

我无法解决这个问题,因为第一个例子是寻找类别6,第二个例子是寻找类别2.我尝试添加一个约束,希望数值可以归结为页面。没有快乐。

另外,我想做这个服务器端。

有什么想法吗?这是我在RouteConfig中的路线:

   routes.MapRoute(
                name: "Category",
                url: "{category}/{subcategory}/{page}",
                defaults: new { controller = "Articles", action = "Index", category= UrlParameter.Optional, subcategory = UrlParameter.Optional, page = UrlParameter.Optional }
                //, constraints: new { page = @"\d+" }
            );

2 个答案:

答案 0 :(得分:2)

确定。我玩弄了这条路线并添加了三条路线来替换原来的路线。

第一个使用分页捕获视图。如果没有提供分页,我只显示第一页。第二条路线是分页的主要类别。

如果存在子类别,则第三条路线将覆盖。这就像现在的魅力一样。 :)

以下是我的路线,以防你想知道我做了什么:

        routes.MapRoute(
            name: "Paged",
            url: "{page}",
            defaults: new { controller = "Articles", action = "Index", page = UrlParameter.Optional }, 
            constraints: new { page = @"\d+" }
        );

        routes.MapRoute(
            name: "PagedCategory",
            url: "{category}/{page}",
            defaults: new { controller = "Articles", action = "Index", category = UrlParameter.Optional, page = UrlParameter.Optional }
            //, constraints: new { page = @"\d+" }
        );

        routes.MapRoute(
            name: "PagedSubCategory",
            url: "{category}/{subcategory}/{page}",
            defaults: new { controller = "Articles", action = "Index", category = UrlParameter.Optional, subcategory = UrlParameter.Optional, page = UrlParameter.Optional }
            //, constraints: new { page = @"\d+" }
        );

答案 1 :(得分:-1)

将页码作为查询字符串参数传递,例如:category/subcategory?page=1

或者像这样改变你的路线,

routes.MapRoute(
                name: "Category",
                url: "{controller}/{action}/{category}/{subcategory}/{page}",
                defaults: new { controller = "Articles", action = "Index", category= UrlParameter.Optional, subcategory = UrlParameter.Optional, page = UrlParameter.Optional }
                //, constraints: new { page = @"\d+" }
            );

希望这有效,谢谢。