生成网页的页码列表

时间:2013-06-04 18:12:01

标签: c# asp.net-mvc loops razor

我正在尝试通过在每个页面的顶部显示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,因为我处理大量数据而无法将其加载到一起。

3 个答案:

答案 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页。