我已经在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?我希望它们只与使分页实现持久性无知的集合一起工作。
我的分页实现中的改进想法有什么问题?他们为何不采用这种方式进行分页的原因是什么?