He comprobado específicamente las implementaciones de paginación en asp.net mvc y realmente siento que hay algo menos eficiente en las implementaciones.
En primer lugar, todas las implementaciones usan valores de paginación como a continuación.
public ActionResult MostPopulars(int pageIndex,int pageSize)
{
}
Lo que me parece incorrecto es pageIndex y pageSize totalmente debería ser miembro de la clase Pagination, de lo contrario, esta forma parece mucho más funcional. También simplifica el pase de parámetros innecesarios en niveles de aplicación.
Lo segundo es que usan la siguiente interfaz.
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; }
}
Si quiero enrutar mi paginación a una acción diferente, entonces tengo que crear un nuevo modelo de vista para encapsular el nombre de la acción o incluso el nombre del controlador. Otra solución puede ser enviar este modelo con interfaz para verlo y luego especificar la acción y el controlador codificados en el método de buscapersonas como parámetro, pero estoy perdiendo la reutilización total de mi vista porque depende estrictamente de una sola acción.
Otra cosa es que usan el siguiente código a la vista
Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
Si el modelo es IPagedList, ¿por qué no proporcionan un método de sobrecarga similar @Html.Pager(Model)
o incluso mejor @Html.Pager()
? Sabes que conocemos el tipo de modelo de esta manera. Antes estaba cometiendo un error porque estaba usando Model.PageIndex en lugar de Model.PageNumber.
Otro gran problema es que dependen en gran medida de la interfaz IQueryable. ¿Cómo saben que uso IQueryable en mi capa de datos? Esperaría que funcionen simplemente con colecciones que mantengan la persistencia de la implementación de paginación ignorante.
¿Qué hay de malo en mis ideas de mejora sobre sus implementaciones de paginación? ¿Cuál es su razón para no implementar sus paginas de esta manera?