Ejemplo n.º 1
0
        public async Task <IActionResult> Index(int page, string orderBy)
        {
            const int ResultsPerPage = 10;

            if (page < 1)
            {
                page = 1;
            }

            int skip = (page - 1) * ResultsPerPage;

            ArticlesIndexOutputModel outputModel = await articlesService.GetArticlesAsync(skip, ResultsPerPage, orderBy);

            if (outputModel.AllArticles == 0)
            {
                return(View(outputModel));
            }

            int lastPage = (int)Math.Ceiling(((double)outputModel.AllArticles / ResultsPerPage));

            if (page > lastPage)
            {
                page = lastPage;

                return(RedirectToAction(nameof(Index), outputModel));
            }

            outputModel.CurrentPage = page;
            outputModel.LastPage    = lastPage;

            return(View(outputModel));
        }
Ejemplo n.º 2
0
        public async Task <ArticlesIndexOutputModel> GetArticlesAsync(int skip, int take, string orderBy)
        {
            IQueryable <Article> query = dbContext.Articles.Where(a => a.IsApproved && !a.IsDeleted).AsQueryable();

            if (orderBy == "views")
            {
                query = query.OrderByDescending(a => a.Views);
            }
            else
            {
                query = query.OrderByDescending(a => a.AddedOn);
            }

            ArticlesIndexOutputModel outputModel = new ArticlesIndexOutputModel
            {
                AllArticles = await query.CountAsync(),
                Articles    = await query
                              .Skip(skip)
                              .Take(take)
                              .ProjectTo <ArticleOutputModel>(mapper.ConfigurationProvider)
                              .ToArrayAsync(),
                OrderedBy = orderBy,
            };

            return(outputModel);
        }