Ho verificato in modo specifico le implementazioni di impaginazione su asp.net mvc e credo davvero che ci sia qualcosa di meno efficiente nelle implementazioni.
Innanzitutto le implementazioni utilizzano valori di impaginazione come di seguito.
public ActionResult MostPopulars(int pageIndex,int pageSize)
{
}
La cosa che mi sbaglio è pageIndex e pageSize totalmente dovrebbero essere membri della classe di paginazione, altrimenti in questo modo sembra molto funzionale. Inoltre semplifica il passaggio di parametri inutili nei livelli di applicazione.
La seconda cosa è che usano l'interfaccia sottostante.
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, quindi devo creare un nuovo modello di vista per incapsulare il nome dell'azione in esso o anche il nome del controller. Un'altra soluzione può essere quella di inviare questo modello interfacciato per visualizzare quindi specificare l'azione e il controller hard coded 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 fornisce un metodo di sovraccarico simile @Html.Pager(Model)
o addirittura migliore @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 si basano fortemente sull'interfaccia IQueryable. Come fanno a sapere che utilizzo IQueryable nel mio livello dati? Mi sarei aspettato che funzionassero semplicemente con raccolte che non tengono conto della persistenza dell'implementazione della paginazione.
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?