如何在c# mvc中进行分页

问题描述 投票:0回答:3

如何在C# MVC中进行分页?

我正在尝试做这样的事情,

我想从数据库中检索 1000 条记录并将其保存在服务器端,然后我想在每个页面发送 10 条记录以供用户请求搜索页面时查看。

我已经浏览了一些示例,但我无法得到更好的解决方案,我更喜欢我建议的方式或更好的解决方案。 (我也使用jquery,而不使用Razor)

我经历过的例子

使用 LINQ to SQL 对搜索结果进行分页

提前致谢

asp.net-mvc c#-4.0 asp.net-mvc-4 pagination
3个回答
0
投票

ASP.NET MVC 中的分页是一些库已经解决的问题;您可以通过以下方式在 Nuget.org 上找到它们 http://www.nuget.org/packages?q=paging

我想从数据库中检索 1000 条记录并将其保存在服务器端,然后我想在每个页面发送 10 条记录以供用户请求搜索页面时查看。

检索 1000 条记录并将其保留在您的应用程序中并不理想。每次请求检索10条记录会更好;正如您在问题中提到的,在 linq 查询中使用

Skip
Take
的解决方案是完美的。不过分页缓存数据没有问题。


0
投票

试试这个 最简单的方法之一

控制器

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 }))

0
投票

公共异步任务 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>

}

© www.soinside.com 2019 - 2024. All rights reserved.