PagedList和Async
我在我的视图中使用了PagedList,但我的脚手架控制器是使用这种默认的索引操作生成的:
public async Task Index() { return View(await db.Claimants.ToListAsync()); }
我没有找到PagedList的扩展名来使用async
。 我的方法必须改为这样的forms:
public ActionResult Index(int? page) { var claimants = db.Claimants.OrderBy(b => b.Name); var notNullPage = page ?? 1; return View(claimants.ToPagedList(notNullPage, 50)); }
是否有合理的方式使用PagedList和async
?
是否有合理的方式使用PagedList和async?
是。 EF没有开箱即用。 但是,您可以获得公开ToPagedListAsync
PagedList.EntityFramework
:
public class PagedListExtended : BasePagedList { private PagedListExtended() { } public static async Task> Create(IQueryable superset, int pageNumber, int pageSize) { var list = new PagedListExtended (); await list.Init(superset, pageNumber, pageSize); return list; } async Task Init(IQueryable superset, int pageNumber, int pageSize) { if (pageNumber < 1) throw new ArgumentOutOfRangeException("pageNumber", pageNumber, "PageNumber cannot be below 1."); if (pageSize < 1) throw new ArgumentOutOfRangeException("pageSize", pageSize, "PageSize cannot be less than 1."); TotalItemCount = superset == null ? 0 : await superset.CountAsync(); PageSize = pageSize; PageNumber = pageNumber; PageCount = TotalItemCount > 0 ? (int) Math.Ceiling(TotalItemCount/(double) PageSize) : 0; HasPreviousPage = PageNumber > 1; HasNextPage = PageNumber < PageCount; IsFirstPage = PageNumber == 1; IsLastPage = PageNumber >= PageCount; FirstItemOnPage = (PageNumber - 1)*PageSize + 1; var num = FirstItemOnPage + PageSize - 1; LastItemOnPage = num > TotalItemCount ? TotalItemCount : num; if (superset == null || TotalItemCount <= 0) return; Subset.AddRange(pageNumber == 1 ? await superset.Skip(0).Take(pageSize).ToListAsync() : await superset.Skip((pageNumber - 1)*pageSize).Take(pageSize).ToListAsync()); } } public static class PagedListExtendedExtensions { public static async Task> ToPagedListAsync (this IQueryable superset, int pageNumber, int pageSize) { return await PagedListExtended .Create(superset, pageNumber, pageSize); } }
是的你可以。
您可以使用X.PagedList ,它是PagedList的改进版本并支持异步操作。