如何在asp.net mvc3应用程序中设置分页路由

时间:2011-04-30 08:35:07

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

我在我的应用程序中设置了简单的分页系统,该系统使用了nerddinner教程中的想法,使用了分页列表类:

   public class PaginatedList<T> : List<T>    {
        public int PageIndex {}
        public int PageSize {}
        public int TotalCount {}
        public int TotalPages {}

        public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize){}

        public bool HasPreviousPage {}

        public bool HasNextPage {}  }

分页工作正常,我用它来通过LINQ2SQL从数据库中获取长表,就像在这个控制器动作中一样:

  public ActionResult Index(int page=0)
    {
        const int pageSize = 10;

        var source = repo.SvaMjesta();
        var paginatedList = new PaginatedList<Mjesto>(source, page, pageSize);

        return View(paginatedList);
    }

分页工作正常,我可以访问任何页面,只要我使用查询类型o URL: / Admin / Mjesta?page = 2
这是我希望避免的,并希望使用简单的URL,如: / Admin / Mjesta / Page / 2

为此,我在 AdminAreaRegistration.cs

中创建了此条目
       context.MapRoute(
            "pMjesta",
            "Admin/Mjesta/Page/{page}",
            new {controller = "Mjesta", action = "Index"});

但是当我尝试访问 / Admin / Mjesta / Page / 2 等网址时,它仍然会引发404错误。

我的想法是首先在MapRouting中构建某种通用的分页条目,所以我可以使用相同的局部视图来呈现每个列表中我有这种需要的分页控件,但是因为我无法使它工作我尝试过这种更具体的方法,但我仍然无法让控制器对此URL请求做出反应。

请提出任何想法和/或建议吗?

2 个答案:

答案 0 :(得分:2)

您是否有该网址可以匹配的其他路线?

例如,如果您仍有默认区域路线:

context.MapRoute(
    "DefaultAreaRoute",
    "Admin/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = Url.Optional });

并且它在新路线之前列出,您首选的网址将匹配并首先使用此路线。

答案 1 :(得分:1)

   context.MapRoute(
        "pMjesta",
        "Admin/Mjesta/Page/{page}",
        new {controller = "Mjesta", action = "Index", page = "{page}"});