在asp.net mvc中进行分页

leo*_*ora 2 asp.net asp.net-mvc paging

我有一个asp.net网站,我在其中使用以下代码进行分页:

    PagedDataSource objPds = new PagedDataSource
                                 {
                                     DataSource = ds.Tables[0].DefaultView,
                                     AllowPaging = true,
                                     PageSize = 12
                                 };
Run Code Online (Sandbox Code Playgroud)

什么是为asp.net-mvc进行分页的等效最佳方式.我认为这实际上属于视图代码.

小智 11

我只想定义一个带有页码的自定义路线:

routes.MapRoute(
                "Books", // Route name
                "books/{page}", // URL with parameters
                new {controller = "Books", action = "List", page = 1}
                );
Run Code Online (Sandbox Code Playgroud)

会给你这种Url:

http://localhost/books/4/
Run Code Online (Sandbox Code Playgroud)

然后在您的控制器操作中,您将获得此页码:

public BooksController
{
    public ActionResult List (int page)
    {
        /* Retrieve records for the requested page from the database */

        return View ();
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,您的视图实际上不会知道当前页面.它只显示提供的记录列表.

您还需要直接在此视图中或在主页面中生成指向各种页面的链接.


CD.*_*D.. 5

Nerd Dinner项目中有一个很好的分页类示例:

public class PaginatedList<T> : List<T> {

        public int PageIndex  { get; private set; }
        public int PageSize   { get; private set; }
        public int TotalCount { get; private set; }
        public int TotalPages { get; private set; }

        public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize) {
            PageIndex = pageIndex;
            PageSize = pageSize;
            TotalCount = source.Count();
            TotalPages = (int) Math.Ceiling(TotalCount / (double)PageSize);

            this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
        }

        public bool HasPreviousPage {
            get {
                return (PageIndex > 0);
            }
        }

        public bool HasNextPage {
            get {
                return (PageIndex+1 < TotalPages);
            }
        }
Run Code Online (Sandbox Code Playgroud)