如何在 C# MVC 中进行分页?
我正在尝试做这样的事情,
我想从数据库中检索 1000 条记录并将其保存在服务器端,然后我想在每个页面发送 10 条记录以在用户请求搜索页面时查看。
我已经经历了一些例子,但我无法获得更好的解决方案,我更喜欢我建议的方式或更好的解决方案。(我也在使用 jquery 而不是使用 Razor)
我经历的例子
提前致谢
如何在 C# MVC 中进行分页?
我正在尝试做这样的事情,
我想从数据库中检索 1000 条记录并将其保存在服务器端,然后我想在每个页面发送 10 条记录以在用户请求搜索页面时查看。
我已经经历了一些例子,但我无法获得更好的解决方案,我更喜欢我建议的方式或更好的解决方案。(我也在使用 jquery 而不是使用 Razor)
我经历的例子
提前致谢
ASP.NET MVC 中的分页是一些库解决的问题;您可以通过http://www.nuget.org/packages?q=paging在 Nuget.org 上找到它们 。
我想从数据库中检索 1000 条记录并将其保存在服务器端,然后我想在每个页面发送 10 条记录以在用户请求搜索页面时查看。
检索 1000 条记录并将它们保存在您的应用程序中并不理想。最好在每个请求中检索 10 条记录;正如您在问题中提到的,在 linq 查询中使用Skip
和的解决方案Take
是完美的。但是,页面缓存数据没有问题。
试试这个最简单的方法之一
控制器
using PagedList;
public ActionResult Index(int ? pagePos)
{
//return View(db.Items.ToList());// Change this as following
int pageNumber = (pagePos ?? 1);
return View(db.Items.ToList().ToPagedList(pageNumber, 30)); //30 is the size of records in a single page
}
索引.cshtml
@*@model IEnumerable<ProjectDB.Models.Item>*@
@*Change These Also as following*@
@model PagedList.IPagedList<ProjectDB.Models.Item>
@using PagedList.Mvc
<table class="table">
<tr>
<th>
Name
</th>
<th>
ID
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.ID)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Details", "Details", new { id=item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
</tr>
}
</table>
@*Pagination Code Starts*@
<div class="pageCount">
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
</div>
@Html.PagedListPager(Model, pagePos => Url.Action("Index", new { pagePos }))