Я использую пейджинг в своем представлении, и изначально моя @модель имела тип PagedList.IPagedList, но у меня были проблемы с отправкой интерфейса IPagedList обратно в контроллер, поэтому я нашел сообщение, в котором давался совет о том, как деконструировать мой IPagedList, поэтому я может представить его в представлении и также иметь возможность отправлять обратно в контроллер для дальнейшей обработки. Однако я столкнулся со следующей проблемой: я хочу отображать только 50 записей на каждой странице. Критерии поиска, которые я тестирую, возвращают 13000 записей. Я ожидаю только 50 записей на первой странице с номерами страниц 1,2,3 внизу. Я вижу номера страниц, как и ожидалось, внизу, но все 13000 записей отображаются на каждой странице. Я отладил код и обнаружил, что функция StaticPagedList
возвращает 13000 записей вместо 50, поэтому я применил Skip and Take к объекту, прежде чем возвращать его в представление, но проблема все еще возникает. Мой код: Просмотр моделей -
public class PagedClientViewModel
{
public int? Page { get; set; }
public IEnumerable<SelectTimeTrackerEditorViewModel> Clients { get; set; }
public IPagedList PagingMetaData { get; set; }
}
public class SelectTimeTrackerEditorViewModel
{
public bool Selected { get; set; }
public int SID { get; set; }
public string PerNo { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Вид -
@model EmergencyResponseTimeEntry.Models.PagedClientViewModel
@использование PagedList; @использование PagedList.Mvc;
@foreach (var item in Model.Clients)
{
<tr>
<td>
@Html.CheckBoxFor(modelItem => item.Selected)
</td>
<td>
@Html.DisplayFor(modelItem => item.PerNo)
</td>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
</tr>
}
Page @(Model.PagingMetaData.PageCount < Model.PagingMetaData.PageNumber ? 0 : Model.PagingMetaData.PageNumber) of @Model.PagingMetaData.PageCount
@Html.PagedListPager(new StaticPagedList<EmergencyResponseTimeEntry.Models.SelectTimeTrackerEditorViewModel>(Model.Clients, Model.PagingMetaData), page => Url.Action("Index", new { page }), new PagedListRenderOptions { DisplayEllipsesWhenNotShowingAllPageNumbers = false})
Контроллер -
var list = (from c in timeTrackers
select new SelectTimeTrackerEditorViewModel
{
Selected = false,
SID = c.SID,
PerNo = c.PerNo,
FirstName = c.FirstName,
LastName = c.LastName
});
var pagedClientViewModel = new PagedClientViewModel
{
Clients = list
};
int pageSize = 50;
int pageNumber = (page ?? 1);
int totalClients = list.Count();
// List of current page of 50 records (hits database again, pulls only 50 records, though)
var timeTrackerList = list.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
pagedClientViewModel.PagingMetaData = new StaticPagedList<SelectTimeTrackerEditorViewModel>
(timeTrackerList, pageNumber, pageSize, totalClients).GetMetaData();
return View(pagedClientViewModel);