我正在尝试通过在每个页面的顶部显示10个数字来向网站添加分页。我编写了这段代码来生成与每个页面对应的10个数字
@for (int i = (Math.Ceiling( page / 10 - 1) * 10 ) + 1; i <= Math.Ceiling( page / 10 - 1) * 10 + 10 ; i++)
{
@Html.ActionLink(i.ToString(), "ShowItems", page = i.ToString() })
@Html.Raw(",");
}
除了结尾之外,这个工作正常。例如,如果我有12页,则会显示分页
1 2 3 4 5 6 7 8 9 10
对于介于1-10之间的所有页面,然后将显示
11 12 13 14 15 16 17 18 19 20
第11页和第12页。
我需要将循环更改为在最后一页停止计数器的内容。
有什么想法吗?
谢谢!
P.S我不想使用PagedList
,因为我处理大量数据而无法将其加载到一起。
答案 0 :(得分:7)
首先,我建议你提取&#34;开始&#34;和&#34;结束&#34;首先分配到局部变量。它使很多更容易调试。因此,您现有的代码将成为(暂时忽略Razor语法):
int startPage = (Math.Ceiling(page / 10 - 1) * 10) + 1;
int endPage = Math.Ceiling(page / 10 - 1) * 10 + 10;
for (int i = startPage; i <= endPage; i++)
我然后提取使用您已完成计算endPage
计算startPage
的大部分工作的事实:
int startPage = (Math.Ceiling(page / 10 - 1) * 10) + 1;
int endPage = startPage + 9;
for (int i = startPage; i <= endPage; i++)
现在你只需要将其限制为页数:
int startPage = (Math.Ceiling(page / 10 - 1) * 10) + 1;
int endPage = Math.Min(startPage + 9, totalPages);
for (int i = startPage; i <= endPage; i++)
答案 1 :(得分:0)
我已经实现了一个方法来做到这一点
private IEnumerable<int> GetPaginationInfo(int total, int itemsPerPage, int currentPage, int rangeBeforeAndAfter = 2)
{
int minPage = 0;
int maxPage = ((int)Math.Ceiling((double)(((double)total) / ((double)itemsPerPage)))) - 1;
int beginPage = currentPage - rangeBeforeAndAfter;
int endPage = currentPage + rangeBeforeAndAfter;
if (beginPage < minPage)
{
endPage += -beginPage;
beginPage = minPage;
}
if (endPage > maxPage)
{
beginPage -= endPage - maxPage;
if (beginPage < minPage)
{
beginPage = minPage;
}
endPage = maxPage;
}
return Enumerable.Range(beginPage + 1, (endPage + 1) - beginPage);
}
呼叫
GetPaginationInfo(100, 10, 0, 5);
答案 2 :(得分:-1)
您可以使用mod(%)查找余数,并将其作为最后一页。
,如
12%10 = 2.所以最后一节将有2页。