0

リストに表示されるページ数を減らすにはどうすればよいですか?

現在検索すると、結果ページにはリスト内のすべての番号が表示されます。たとえば、最初のページ1、2、3、4、5、6、7、8、9、10などから最後のページまでです。一部の検索結果には最大40ページが含まれる可能性があるため、少し乱雑に見えます。

このようなページを表示するようにコードを変更するにはどうすればよいですか。たとえば、最初のページ1、2、3、... 9、10。最後のページ。

3ページ目を選択すると、リストには最初のページ3、4、5、... 9、10などが表示されます。最後のページ。

.NETMVC3を使用しています。これは、ビューを生成するために使用されているコードです

    <%@ Control Language="C#"Inherits="System.Web.Mvc.ViewUserControl<MyApp.Web.Extensions.PaginatedList<MyApp.Data.Product>>" %>
<div style="text-align: center; margin-bottom: 5px;">
<ul id="paginator">
    <% if (Model.HasPreviousPage)
       { %>
    <li>
        <%= Html.RouteLink("First Page", new { namespaces = "Administrator", controller = "Products", action = "ViewAll", page = 0 })%></li>
    <% } %>
    <% else %>
    <% { %>
    <li>First Page</li>
    <% } %>
    <%-- Show all the pages here in a list --%>
    <% for (int i = 0; i < Model.TotalPages; i++) %>
    <% { %>
    <% if (i == Model.PageIndex) %>
    <% { %>
    <li>
        <%: i+1 %></li>
    <% } %>
    <% else %>
    <% { %>
    <li>
        <%= Html.RouteLink((i + 1).ToString(), new { namespaces = "Administrator", controller = "Products", action = "ViewAll", page = i })%>
    </li>
    <% } %>
    <% } %>
    <% if (Model.HasNextPage)
       { %>
    <li>
        <%= Html.RouteLink("Last Page", new { namespaces = "Administrator", controller = "Products", action = "ViewAll", page = Model.TotalPages - 1 })%></li>
    <% } %>
    <% else %>
    <% { %>
    <li>Last Page</li>
    <% } %>
</ul>
</div>

クラスのこのコード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MyApp.Web.Extensions
{
public class PaginatedList<T> : List<T> where T : MyApp.Data.Product
{
    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.OrderBy(t => t.CreatedDate).OrderByDescending(t => t.CreatedDate).Skip(PageIndex * PageSize).Take(PageSize));
    }

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

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

追加情報が必要な場合はコメントを残してください。また、ご協力いただきありがとうございます。

4

2 に答える 2

3

これはあなたが探しているものです...

ASP.NETMVCを使用したページング

于 2012-07-09T11:47:34.807 に答える
2

カスタムjqueryページングを使用します。以下はいくつかの良い例です...どれでも試してみてください。

http://www.gowestwebdesign.com/demos/jquery-cycle-gallery-next-back-paging/#thedemo

http://d-scribe.de/webtools/jquery-pagination/demo/demo_options.htm

http://www.freelancer.com/work/jquery-pagination-demo/

http://tympanus.net/jPaginate/

于 2012-07-09T11:42:58.697 に答える