PagedList mit LINQ Skip and Take, aber Paging mit Count of Results anzeigen

Ich versuche, eine gefilterte Liste der Produkte anzuzeigen, die auf dem Kategoriefilter und ItemsPerPage basiert. Bei der Verwendung mit PagedList treten jedoch einige Probleme auf.

Jemand mit PagedList-Kenntnissen kann mir raten, ob ich meinen eigenen Paginierungscode schreiben muss oder ob es eine Möglichkeit gibt, mit PagedList die gewünschten Ergebnisse zu erzielen.

Ich verwende die Skip & Take-Funktionen von LINQ, um nur die Anzahl der Zeilen abzurufen, die auf der aktuellen Seite angezeigt werden müssen. Ich möchte jedoch weiterhin, dass Paging-Links Seiten basierend auf der Gesamtanzahl der Filter anzeigen.

Z.B.: Mein Suchfilter findet 50 Ergebnisse, aber da meine Zeilen pro Seite 10 Elemente enthalten, verwende ich LINQs Skip () & Take (), um nur 10 Zeilen zurückzugewinnen. Ich muss in meiner View.cshtml noch die Seitenlinks anzeigen<< 1 | 2 | 3 | 4 | 5 >> Momentan bekomme ich nur mit der Standard-PagedList<< 1 >>Ich weiß, warum ich nur eine Seite sehe, wollte aber nur wissen, wie ich es schaffen kann, die richtige Anzahl von Seitenlinks anzuzeigen, während ich nur eine Teilmenge der Ergebnisse erhalte.

** Mein Ziel ist es, optimierte Abfragen in die Datenbank zu schreiben, damit die Antwortleistung der Webseite schnell ist.

So sieht mein Code für die Action-Methode aus. Der Code liefert die richtigen Ergebnisse, aber die Paginierung funktioniert nicht so, wie ich es brauche:

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));
}

Hier ist der Codeausschnitt aus der Ansicht, der sich mit der Paginierung befasst. Ich habe mir die Github-Site des Projekts angesehen, konnte jedoch keine Erweiterungsmethode zum Bereitstellen benutzerdefinierter Seiten finden. Ich denke, es wird nur die Anzahl der Seiten basierend auf "Artikel pro Seite" und der Anzahl () der Produkte im @Model rendern:

@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>

Antworten auf die Frage(5)

Ihre Antwort auf die Frage