【问题标题】:Asp Core, How to use PagingList<T>.CreateAsync() with a viewModel?Asp Core,如何将 PagingList<T>.CreateAsync() 与 viewModel 一起使用?
【发布时间】:2018-01-19 22:54:42
【问题描述】:

我正在开发一个 asp.net core 1.1 项目,我想在我的一些视图中创建分页。我研究了关于在 asp 核心中分页的 microsoft 文档,但它是一个非常简单的模式,只有 1 个表。在我看来,我使用多表并使用viewmodel 对其进行初始化。我想使用PagingList&lt;T&gt;.CreateAsync() 方法创建分页但得到错误: can not convert from system.linq.Iqueryable&lt;&gt; to system.linq.IorderedQueryable&lt;&gt;

我的行动:

    [HttpGet]
    public async Task<IActionResult> Index(int? page)
    {
        List<BookListViewModel> model = new List<BookListViewModel>();
        var query = (from b in _context.books
                     join a in _context.authors on b.AuthorID equals a.AuthorId
                     join bg in _context.bookgroups on b.BookGroupID equals bg.BookGroupId


                     select new
                     {
                         b.BookId,
                         b.BookName,
                         b.BookPageCount,
                         b.BookImage,
                         b.AuthorID,
                         b.BookGroupID,
                         a.AuthorName,
                         bg.BookGroupName
                     });

        foreach (var item in query)
        {
            BookListViewModel objmodel = new BookListViewModel();

            objmodel.BookId = item.BookId;
            objmodel.BookName = item.BookName;
            objmodel.BookImage = item.BookImage;
            objmodel.BookPageCount = item.BookPageCount;
            objmodel.AuthorId = item.AuthorID;
            objmodel.BookGroupId = item.BookGroupID;
            objmodel.AuthorName = item.AuthorName;
            objmodel.BookGroupName = item.BookGroupName;

            model.Add(objmodel);

        }
        ViewBag.RootPath = "/upload/thumbnailimage/";
        int pageSize = 3;
        int pageNumber = (page ?? 1);

        return View(await PagingList<BookListViewModel>.CreateAsync(model.AsQueryable() , pageNumber, pageSize));
    }

我还没有在index视图中写任何关于分页的东西,它是一个简单的视图模型列表

【问题讨论】:

  • 不知道吗?

标签: asp.net asp.net-mvc sorting asp.net-core paging


【解决方案1】:

从您发布的代码中无法确定。但例外情况是CreateAsync 方法需要IOrderedQueryable,但您给它的是IQueryable

尝试将其更改为传入query 对象(如果您使用的是实体框架,我猜它应该实现IOrderedQueryable)。

PagingList(大概)背后的想法是用它在数据库中进行分页。
您正在做的是将过滤后的集合带入内存(当对结果进行遍历时),然后进行分页。

代码可能如下所示:

[HttpGet]
public async Task<IActionResult> Index(int page = 1)
{
  var query = (from b in _context.books
               join a in _context.authors on b.AuthorID equals a.AuthorId
               join bg in _context.bookgroups on b.BookGroupID equals bg.BookGroupId


               select new BookListViewModel()
               {
                 BookId = b.BookId,
                 BookName = b.BookName,
                 BookPageCount = b.BookPageCount,
                 BookImage = b.BookImage,
                 AuthorId = b.AuthorID,
                 BookGroupId = b.BookGroupID,
                 AuthorName = a.AuthorName,
                 BookGroupName = bg.BookGroupName
               }).AsNoTracking().OrderBy(u => u.BookId);


  ViewBag.RootPath = "/upload/thumbnailimage/";

  var pagedResult = await PagingList<BookListViewModel>.CreateAsync(query, 10, page);
  return View(pagedResult);
}

希望对你有帮助。

【讨论】:

  • 谢谢,我改成IOrderedQueryable也有错误。我在这里问了另一个关于这个主题的问题link
  • 我添加了一些示例代码。这有帮助吗?如果没有,请尝试发布您的 PagingList 课程。
猜你喜欢
  • 2019-11-15
  • 2013-05-05
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多