如何在C# MVC中进行分页?
我正在尝试做这样的事情,
我想从数据库中检索 1000 条记录并将其保存在服务器端,然后我想在每个页面发送 10 条记录以供用户请求搜索页面时查看。
我已经浏览了一些示例,但我无法得到更好的解决方案,我更喜欢我建议的方式或更好的解决方案。 (我也使用jquery,而不使用Razor)
我经历过的例子
提前致谢
ASP.NET MVC 中的分页是一些库已经解决的问题;您可以通过以下方式在 Nuget.org 上找到它们 http://www.nuget.org/packages?q=paging。
我想从数据库中检索 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 }))
公共异步任务 ProductPagination(int page = 1, int count = 8) { var items = _db.Product.Skip((page - 1) * count).Take(count).Select(s => new ProductListItemVM {
Id = s.Id,
Name = s.Name,
ProductCode = s.ProductCode,
About = s.About,
Description = s.Description,
SellPrice = s.SellPrice,
CostPrice = s.CostPrice,
Discount = s.Discount,
Quantity = s.Quantity,
CategoryId = s.CategoryId,
ProductMainImg = s.ProductMainImg,
IsDeleted = s.IsDeleted,
TagId = s.TagProducts.Select(a => a.TagId).ToList(),
});
int totalCount = await _db.Product.CountAsync();
PaginationVM<IEnumerable<ProductListItemVM>> pag = new(totalCount, page, (int)Math.Ceiling((decimal)totalCount / count), items);
return PartialView("_ProductPaginationPartial", pag);
}
@节脚本{
$("#dataTable").on("click", "#prod-pag a", function (ev) {
ev.preventDefault();
fetch($(this).attr("href"))
.then(res => res.text())
.then(data => $("#dataTable").html(data))
})
</script>
}