首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PagedList与异步

PagedList与异步
EN

Stack Overflow用户
提问于 2015-07-22 21:29:03
回答 2查看 8K关注 0票数 13

我在视图中使用PagedList,但是我的脚手架控制器是用这种默认索引操作生成的:

代码语言:javascript
复制
public async Task<ActionResult> Index()
{
    return View(await db.Claimants.ToListAsync());
}

我没有为PagedList找到一个扩展来使用async。我的方法必须更改为如下形式:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-22 21:57:40

是否有合理的方法使用PagedList和异步?

是。不能用EF从盒子里出来。但是,您可以获得PagedList.EntityFramework,它公开了一个ToPagedListAsync

代码语言:javascript
复制
public class PagedListExtended<T> : BasePagedList<T> 
{
    private PagedListExtended() 
    {
    }

    public static async Task<IPagedList<T>> Create(IQueryable<T> superset, int pageNumber, int pageSize) 
    {
        var list = new PagedListExtended<T>();
        await list.Init(superset, pageNumber, pageSize);
        return list;
    }

    async Task Init(IQueryable<T> 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<IPagedList<T>> ToPagedListAsync<T>(this IQueryable<T> superset, int pageNumber, int pageSize)
     {
         return await PagedListExtended<T>.Create(superset, pageNumber, pageSize);
      }
}
票数 19
EN

Stack Overflow用户

发布于 2016-05-13 16:12:37

可以,停那儿吧。

您可以使用X.PagedList,它是PagedList的改进版本,支持异步操作。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31574315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档