【问题标题】:Page displays everything that is in the database页面显示数据库中的所有内容
【发布时间】:2019-11-12 00:26:16
【问题描述】:

PageSize 字段表示信息应显示在一页上,大约八个对象,但该页显示数据库中的所有内容。

        private readonly IObjectRepository _objectRepository;
        private readonly IWebHostEnvironment hostingEnvironment;
        public int PageSize = 8;

        public HomeController(IObjectRepository objectRepository, IWebHostEnvironment hostingEnvironment)
        {
            _objectRepository = objectRepository;
            this.hostingEnvironment = hostingEnvironment;
        }

        public ViewResult Index(int objectPage)
        {
            var model = _objectRepository.GetAllObjects();
            model.OrderBy(o => o.Id)
                 .Skip((objectPage - 1) * PageSize)
                 .Take(PageSize);
            return View(model);
        }

【问题讨论】:

  • How to ask“不起作用”不是对问题的技术描述。
  • 对不起,我的错。已更正。

标签: asp.net-core-mvc asp.net-core-2.1


【解决方案1】:

SkipTake 结果返回一个新的 IEnumerable,而不是修改现有的。所以,你应该替换这一行:

model.OrderBy(o => o.Id)
             .Skip((objectPage - 1) * PageSize)
             .Take(PageSize);

与:

model=model.OrderBy(o => o.Id)
             .Skip((objectPage - 1) * PageSize)
             .Take(PageSize);

这样,您将新的查询值分配给 baseQuery,然后当您枚举它时,它将返回预期的实体。

【讨论】:

    【解决方案2】:

    谢谢大家!我找到了 Methanit 的另一个解决方案,非常感谢他。

    1 - 改变了我的 PageViewModel

    public class PageViewModel
        {
            public int PageNumber { get; set; }
            public int TotalPages { get; set; }
    
    
        public PageViewModel(int count, int pageNumber, int pageSize)
        {
            PageNumber = pageNumber;
            TotalPages = (int)Math.Ceiling(count / (double)pageSize);
        }
    
        public bool HasPreviousPage
        {
            get
            {
                return (PageNumber > 1);
            }
        }
    
        public bool HasNextPage
        {
            get
            {
                return (PageNumber < TotalPages);
            }
        }
    }
    

    2 - 更改控制器中的方法索引:

    public IActionResult Index(int page = 1)
            {
                int pageSize = 6;
                var model = _objectRepository.GetAllObjects();
                var count = model.Count();
                var items = model.Skip((page - 1) * pageSize).Take(pageSize).ToList();
                PageViewModel pageViewModel = new PageViewModel(count, page, pageSize);
                IndexViewModel viewModel = new IndexViewModel
                {
                    PageViewModel = pageViewModel,
                    Objects = items
                };
                return View(viewModel);
            }
    

    3 - 应用程序工作正常。 非常感谢!

    【讨论】:

      猜你喜欢
      • 2019-12-30
      • 2020-11-01
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多