Ho controllato le impaginazioni di impaginazione su asp.net mvc in particolare e sento davvero che c'è qualcosa di meno efficiente nelle implementazioni.
Prima di tutto tutte le implementazioni usano valori di impaginazione come sotto.
public ActionResult MostPopulars(int pageIndex,int pageSize)
{
}
La cosa che mi sembra sbagliata è che pageIndex e pageSize dovrebbero essere tutti membri della classe di Pagination altrimenti in questo modo sembra un modo molto funzionale. Inoltre semplifica il passaggio di parametri non richiesti in livelli di applicazione.
La seconda cosa è che usano l'interfaccia di sotto.
public interface IPagedList<T> : IList<T>
{
int PageCount { get; }
int TotalItemCount { get; }
int PageIndex { get; }
int PageNumber { get; }
int PageSize { get; }
bool HasPreviousPage { get; }
bool HasNextPage { get; }
bool IsFirstPage { get; }
bool IsLastPage { get; }
}
Se voglio indirizzare la mia impaginazione a un'azione diversa, devo creare un nuovo modello di visualizzazione per racchiudere il nome dell'azione o persino il nome del controller. Un'altra soluzione può essere che l'invio di questo modello interfacciato per visualizzare quindi specificare l'azione e il controller codificati nel metodo cercapersone come parametro, ma sto perdendo totalmente la riutilizzabilità della mia vista perché dipende strettamente da una sola azione.
Un'altra cosa è che usano sotto il codice in vista
Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
Se il modello è IPagedList, perché non forniscono un metodo di overload come @Html.Pager(Model)
o meglio ancora uno è @Html.Pager()
. Sai che conosciamo il tipo di modello in questo modo. Prima stavo facendo un errore perché stavo usando Model.PageIndex invece di Model.PageNumber.
Un altro grosso problema è che dipendono strongmente dall'interfaccia IQueryable. Come sanno che uso IQueryable nel mio livello dati? Mi sarei aspettato che funzionassero semplicemente con collezioni che ignorano la persistenza nell'impaginazione.
Cosa c'è di sbagliato nelle mie idee di miglioramento rispetto alle loro implementazioni di impaginazione? Qual è la loro ragione per non implementare le loro impaginazioni in questo modo?