分页 .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连接,或者如何在此解决方案上创建新的分页?
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 }))