c# - 生成网页的页码列表

标签 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,因为我正在处理大量数据并且无法一次加载它。

最佳答案

首先,我建议您先将“开始”和“结束”部分提取到局部变量中。它将使调试变得很多。因此,您现有的代码将变为(暂时忽略 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++)

关于c# - 生成网页的页码列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16924699/

相关文章:

java - 向现有的 java 程序添加循环?

c# - 让 WCF 回调与 netTcpBinding 一起工作

c# - 如何从 mvc 4 razor 中的共享 View 访问 Controller 操作?

asp.net-mvc - HttpStatusCodeResult 消息编码

java - 如果要在循环中创建一个对象,它会在每次迭代中不断重新创建该循环吗?

javascript - 正则表达式不会在循环中返回 true

c# - 通用类和 IEquatable 问题

c# XML 避免使用 XDocument 进行 html 编码

c# - 用 StreamReader 打开资源文件?

asp.net-mvc - 确保每个 Controller 方法都有一个 ValidateAntiForgeryToken 属性?