0

Nerddinnerチュートリアルのページングの例を使用しました。しかし、私はまた、ページ番号を追加したかったのです。

<<< 1 2 3 4 5 6 >>>

以下のコードは、ページングを0から開始した場合に機能しますが、1から開始した場合は機能しません。これを修正するにはどうすればよいですか?

これが私のコードです:

PaginatedList.cs

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);
        }
    }
}

UserController.cs

    public ActionResult List(int? page)
    {
        const int pageSize = 20;

        IUserRepository userRepository = new UserRepository();
        IQueryable<User> listUsers = userRepository.GetAll();
        PaginatedList<User> paginatedUsers = new PaginatedList<User>(listUsers, page ?? 0, pageSize);

        return View(paginatedUsers);
    }

List.cshtml

@if (Model.HasPreviousPage) 
{ 
    @Html.RouteLink(" Previous ", "PaginatedUsers", new { page = (Model.PageIndex - 1) }) 
}

@for (int i = 1; i <=  Model.TotalPages; i++)
{
    @Html.RouteLink(@i.ToString(), "PaginatedUsers", new { page = (@i ) })   
}

@if (Model.HasNextPage)
{
    @Html.RouteLink(" Next ", "PaginatedUsers", new { page = (Model.PageIndex + 1) })
} 
4

3 に答える 3

1

PaginatedList.cs

.Skip((PageIndex -1) * PageSize).Take(PageSize)

UserController.cs

public ActionResult List(int page = 1)
{
于 2012-05-30T22:33:01.297 に答える
0

私はこの変更を加えました:

PaginatedList.cs

public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize) {
        .
        .
        .
        this.AddRange(source.Skip((PageIndex -1) * PageSize).Take(PageSize));
    }

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

    public bool HasNextPage {
        get {
            return (PageIndex < TotalPages);
        }
    }

UserController.cs

    public ActionResult List(int? page)
    {
        const int pageSize = 20;

        page = (page < 1) ? 1 : page ?? 0;
        .
        .
        .
于 2012-05-31T07:57:19.320 に答える
0

独自のページネーション コードを記述する代わりに、ライブラリを使用することをお勧めします。MvcPagingはそれらのライブラリの 1 つです。

ここで私の答えを参照してください-カスタムhtml(テーブルベースではない)のページングに使用する優れたライブラリは何ですか?

于 2012-05-31T08:26:13.657 に答える