我有以下问题。我想做很好的分页,我不想将所有记录从WebService下载到我的应用程序。
控制器代码:
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连接,或者如何在此解决方案上创建新的分页?
答案 0 :(得分:2)
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 }))