2012-07-09 38 views
0

如何縮短列表中顯示的頁面數量?如何設置在搜索ASP.NET MVC3中顯示的頁面數

當前搜索時,結果頁面將顯示列表 中的每個數字,例如,第一頁1,2,3,4,5,6,7,8,9,10等到最後一頁。某些搜索結果最多可能有40頁,因此看起來有點雜亂。

如何更改代碼以顯示像這樣的頁面 ,例如第1頁,2,3,... 9,10.最後一頁。

當選擇第三頁時,該列表將顯示 ,例如第一頁3,4,5,... 9,10。最後一頁。

我正在使用.NET MVC3。 這是正在使用的代碼來生成視圖

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

如果需要更多的信息,請發表評論。 也提前感謝您提供的任何幫助。

+0

您是否考慮使用ready組件?例如,DEVExprees提供了相當不錯的尋呼機: https://www.devexpress.com/Products/Free/NetOffer/ – 2012-07-09 11:36:26

+0

將它標記爲已回答,如果您覺得。 – 2012-07-09 11:52:38

回答

相關問題