ASP.NET MVC i stronicowanie wyników

W ASP.NET MVC nie ma wbudowanego wsparcia stronicowania dla wyświetlanych danych. W czystym ASP .NET mieliśmy do dyspozycji wiele zaawansowanych kontrolek, które wspierały mechanizm stronicowania (np. ListView). W ASP.NET MVC interfejs definiujemy za pomocą czystego HTML\XHTML i sami musimy zadbać o możliwość stronicowania. Nie jest to trudne ale wymaga jednak trochę nakładu pracy. Jeśli chcemy mieć elastyczną bibliotekę do obsługi stronicowania to implementacja jest już dość czasochłonna. Dlatego w tym poście przedstawię gotową bibliotekę MvcPager załatwiająca większość rzeczy za nas. Niezbędne pliki możecie pobrać ze strony projektu tutaj. 

Po ściągnięciu plików należy najpierw dodać bibliotekę MVCPager do referencji. Następnie w widoku, który chcemy użyć stronicowania niezbędne jest zaimportowanie biblioteki za pomocą dyrektywy import:

<%@ Import Namespace="Webdiyer.WebControls.Mvc"%>

Następnie można wygenerować elementy graficzne odpowiedzialne za stronicowanie:

<%=Html.Pager(Model, new PagerOptions
{
    
    CurrentPagerItemWrapperFormatString = "<span class=\"cpb\">{0}</span>",    
    NumericPagerItemWrapperFormatString = "<span class=\"item\">{0}</span>",   
    CssClass = "pages",
    PageIndexParameterName = "quotePageIndex",
    NextPageText = ">>>",   
    PrevPageText = "<<<",
    ShowDisabledPagerItems = false,
    FirstPageText = "Pierwszy",
    SeparatorHtml = "" ,
    NumericPagerItemCount=5,
    LastPageText = "Ostatni"
}, "quotes")
    %>

Jak widać biblioteka umożliwia bardzo dokładną konfiguracje. Programista może m.in. określić wykorzystywany styl css lub ilość wyników na pojedynczej stronie. W funkcji Pager jako pierwszy parametr przekazuje się kolekcję danych a konkretnie Webdiyer.WebControls.Mvc.PagedList. Aby stronicowanie działało koniecznie musimy wykorzystać ten konkrety typ ale istnieje konwerter, który umożliwia łatwą zamianę np. IQueryable na PagedList:

Webdiyer.WebControls.Mvc.PagedList<Entities.Quote> quotes=null;
// quotes to IQueryable
pagedQuotes = quotes.ToPagedList(colDefs.QuotePageIndex, colDefs.PageSize);

image

W wyniku powyższego kodu dostaniemy stronicowanie pokazane na screenie. Implementacja samodzielna wcale nie jest taka prosta – głównie ze względu na wyświetlanie numerów stron. Poza tym poco męczyć się z czymś co jest już od dawna rozwiązane i dostępne publicznie za darmo?

2 thoughts on “ASP.NET MVC i stronicowanie wyników”

  1. Banalna ale jak chcesz to zrobić elastycznie itp to potrwa Ci to przynajmniej 1h (chyba, że kiedy robiłeś coś podobnego):) Wiec po co.

Leave a Reply

Your email address will not be published.