Я пытаюсь отобразить отфильтрованный список продуктов на основе фильтра категорий и ItemsPerPage, но у меня возникают некоторые проблемы при попытке использовать его с PagedList.
Кто-то с опытом PagedList может посоветовать мне, если мне нужно написать свой собственный код разбивки на страницы или есть способ получить результаты, которые мне нужны, используя PagedList.
Я использую функции LINQ Skip и Take, чтобы получить только количество строк, которые должны отображаться на текущей странице, но мне все равно понравятся пейджинговые ссылки для отображения страниц на основе общего количества фильтров.
Например: мой фильтр поиска находит 50 результатов, но поскольку мои строки на странице говорят 10 элементов, я использую LINQ Skip() и Take(), чтобы получить только 10 строк назад. Мне все еще нужно показать в моем View.cshtml ссылки на страницы < < 1 | 2 | 3 | 4 | 5 → Прямо сейчас с PagedList по умолчанию, я получаю только < < 1 → . Я знаю, почему я вижу только одну страницу, но просто хочу знать, как я могу заставить ее работать, чтобы показать правильное количество ссылок на страницы, а только получить подмножество результатов.
** Моя цель - написать оптимизированные запросы в базу данных, чтобы производительность реакции веб-страницы была быстрой.
Вот как выглядит мой код для Action Action. Код получает правильные результаты, но разбиение на страницы не работает так, как мне нужно:
public ViewResult List(int page =1, string category =null)
{
if (category != null) this.CurrentCategory = category;
var products = repository.Products
.Where(p => this.CurrentCategory == null || p.Category == this.CurrentCategory)
.OrderBy(p => p.ProductID)
.Skip((page -1) * PageSize)
.Take(PageSize);
return View(products.ToList().ToPagedList(page, PageSize));
}
Вот фрагмент кода из представления, который связан с разбиением на страницы. Я просмотрел сайт Github проекта, но не смог найти метод расширения для предоставления настраиваемых страниц. Я думаю, что он будет отображать только количество страниц на основе "элементов на странице" и Count() продуктов в @Model:
@model IPagedList<Product>
//foreach loop that renders the @Model
//Code that displays the pagination using PagedList
<div style="text-align:center">
@Html.PagedListPager(Model, page => Url.Action("List", new { page = page, category = ViewBag.CurrentCategory }), PagedListRenderOptions.OnlyShowFivePagesAtATime
)
</div>