Я проверил реализации разбиения на страницы на asp.net mvc специально, и я действительно чувствую, что есть кое-что менее эффективное в реализациях.
Прежде всего, все реализации используют значения нумерации страниц, как показано ниже.
public ActionResult MostPopulars(int pageIndex,int pageSize)
{
}
Единственное, что я чувствую неправильно, это то, что pageIndex и pageSize должны быть членами класса Pagination, иначе этот способ выглядит намного функциональнее. Также это упрощает ненужный переход параметров в уровни приложения.
Во-вторых, они используют интерфейс ниже.
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; }
}
Если я хочу направить свою нумерацию страниц на другие действия, мне нужно создать новую модель представления для инкапсуляции имени действия в ней или даже имени контроллера. Другое решение может состоять в том, что отправка этой интерфейсной модели для просмотра, а затем в качестве параметра указывает действие и контроллер, жестко запрограммированные в методе пейджера, но я теряю возможность повторного использования моего представления, поскольку оно строго зависит только от одного действия.
Другое дело, что они используют код ниже
Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
Если модель IPagedList, почему они не предоставляют такой метод перегрузки, как @Html.Pager(Model)
или даже лучше @Html.Pager()
. Вы знаете, что мы знаем тип модели таким образом. Прежде чем я делал ошибку, потому что я использовал Model.PageIndex вместо Model.PageNumber.
Еще одна большая проблема - они сильно полагаются на интерфейс IQueryable. Откуда они знают, что я использую IQueryable в своем слое данных? Я ожидал бы, что они работают просто с коллекциями, которые сохраняют невежественность реализации реализации нумерации страниц.
Что плохого в моих идеях по улучшению их реализации нумерации страниц? Какова их причина, чтобы не осуществлять свои нумерации страниц таким образом?