分页 .net MVC - 无需从 Web 服务下载所有记录

本文关键字:下载 服务 记录 Web MVC net 分页 | 更新日期: 2023-09-27 17:56:51

我有以下问题。我想做很好的分页,但我不想将所有记录从 Web 服务下载到我的应用程序。

控制器代码:

public ActionResult Vacations(int? page)
        {
            int pageNumber = page ?? 1;
            int quantity = 5;
            using (MyWebService.MyWebServiceClient client = new MyWebService.MyWebServiceClient())
            {
                var vacations = client.GetUserAbsence(SessionManager.CurrentToken, quantity, pageNumber); 
                var onePageOfVacations = vacations.ToPagedList(pageNumber, quantity);
                ViewBag.OnePageOfVacations = onePageOfVacations;
            }
            return View();
        }

查看代码:

<h2>Vacations</h2>
<div>
    <table class="table tablesorter table-striped">
        <thead>
            <tr>
                <th>Data od</th>
                <th>Data do</th>
                <th>Ilość dni</th>
            </tr>
        </thead>
        <tbody>
            @{
                foreach (var v in ViewBag.OnePageOfVacations)
                {
                    <tr>
                        <td>@v.From_Date</td>
                        <td>@v.To_Date</td>
                        <td>@v.Element_Name</td>
                    </tr>
                }
            }
        </tbody>
        <tfoot>
            <tr>
                <th>Data od</th>
                <th>Data do</th>
                <th>Ilość dni</th>
            </tr>
        </tfoot>
    </table>
</div>
<!-- output a paging control that lets the user navigation to the previous page, next page, etc -->
@Html.PagedListPager((IPagedList)ViewBag.OnePageOfVacations, page => Url.Action("Vacations", new { page }))

我的网络服务"GetUserAbsence()"中有一个方法,它只返回我需要的记录数量。现在我只有一页,无法显示其他结果。有我的问题 - 如何将此解决方案与PagedList连接,或者如何在此解决方案上创建新的分页?

分页 .net MVC - 无需从 Web 服务下载所有记录

MVC.PagedList 有一个StaticPagedList方法,允许您提供IEnumerable<T>而不是IQuerable<T>,但您必须知道记录的总数。在您的情况下,这将是

var vacations = client.GetUserAbsence(SessionManager.CurrentToken, quantity, pageNumber);
int totalItems = .... // see following note
ViewBag.OnePageOfVacations = new StaticPagedList<yourModel>(vacations, pageNumber, quantity, totalItems);

这意味着您的服务需要包含另一个返回总记录计数的方法(但应该非常快),或者您可以修改 GetUserAbsence() 方法以返回包含筛选集合的属性以及总记录值的对象。

旁注:我建议你将强类型模型传递给视图,而不是使用 ViewBag ,以便控制器代码

....
var model = new StaticPagedList<yourModel>(vacations, pageNumber, quantity, totalItems);
return View(model);

并在视图中

@model PagedList.IPagedList<yourModel>
....
@foreach (var v in Model)
{
    ....
}
....
@Html.PagedListPager(Model, page => Url.Action("Vacations", new { page }))