コード例 #1
0
        /// <summary>
        /// Инициализирует модель представления данными, полученными из БД с использованием указанных фильтров
        /// </summary>
        /// <param name="author">Фильтр по автору</param>
        /// <param name="category">Фильтр по категории</param>
        /// <param name="orderBy">Порядок сортировки</param>
        /// <param name="page">Страница вывода</param>
        /// <returns></returns>
        public async Task Initialize(string author, string category, FeedbackOrderBy orderBy, int page)
        {
            Feedbacks = await GetFeedbackPagedList(author, category, orderBy, page);

            CategoryList = await _categoryCreator.GetCategories("Все категории");

            Author   = author;
            Category = category;
            OrderBy  = orderBy;
            Page     = page;
        }
コード例 #2
0
        /// <summary>
        /// Возвращает представление со списком отзывов пользователей
        /// </summary>
        /// <returns></returns>
        public async Task <ActionResult> ViewFeedbacks(string author, string category, int?page, FeedbackOrderBy orderBy = FeedbackOrderBy.Date)
        {
            var model = new IndexViewModel(_repository, _creator);
            await model.Initialize(author, category, orderBy, page ?? 1);

            return(View(model));
        }
コード例 #3
0
        /// <summary>
        /// Возвращает запрос на список отзывов, соответствующих указанным фильтрам
        /// </summary>
        /// <param name="author">Фильтр по автору отзыва</param>
        /// <param name="category">Фильтр по категории</param>
        /// <param name="order">Порядок сортировки</param>
        /// <param name="page">Текущая страница выдачи</param>
        /// <param name="pageSize">Количество элементов на страницу</param>
        /// <returns></returns>
        public async Task <IPagedList <Feedback> > GetPagedList(string author, string category, FeedbackOrderBy order, int page, int pageSize)
        {
            using (var db = new FeedbackContext())
            {
                var feedbacks = db.Feedbacks.Include(t => t.AttachedFiles).Include(x => x.Category);

                if (!string.IsNullOrWhiteSpace(author))
                {
                    feedbacks = feedbacks.Where(t => t.UserName.Contains(author));
                }

                if (!string.IsNullOrWhiteSpace(category))
                {
                    feedbacks = feedbacks.Where(t => t.Category.Name == category);
                }

                switch (order)
                {
                case FeedbackOrderBy.Author:
                    feedbacks = feedbacks.OrderBy(t => t.UserName);
                    break;

                case FeedbackOrderBy.Category:
                    feedbacks = feedbacks.OrderBy(t => t.Category.Name);
                    break;

                case FeedbackOrderBy.AuthorDesc:
                    feedbacks = feedbacks.OrderByDescending(t => t.UserName);
                    break;

                case FeedbackOrderBy.CategoryDesc:
                    feedbacks = feedbacks.OrderByDescending(t => t.Category.Name);
                    break;

                case FeedbackOrderBy.DateDesc:
                    feedbacks = feedbacks.OrderByDescending(t => t.PostDate);
                    break;

                default:
                    feedbacks = feedbacks.OrderBy(t => t.PostDate);
                    break;
                }

                var result = await feedbacks.Skip((page - 1) *pageSize).Take(pageSize).ToListAsync();

                return(new PagedList <Feedback>(result, page, pageSize, feedbacks.Count()));
            }
        }
コード例 #4
0
        /// <summary>
        /// Возвращает список  моделей представления для отзывов
        /// </summary>
        /// <param name="author">Фильтр по автору и содержанию</param>
        /// <param name="category">Фильтр по категории</param>
        /// <param name="order">Определяет поле и порядок сортировки</param>
        /// <param name="page">Задает страницу выдачи</param>
        /// <param name="pageSize">Задает количество элементов на страницу</param>
        /// <returns></returns>
        private async Task <PagedList <FeedbackDisplayViewModel> > GetFeedbackPagedList(string author, string category, FeedbackOrderBy order, int page)
        {
            var result = await _repository.GetPagedList(author, category, order, page, pageSize);

            return(new PagedList <FeedbackDisplayViewModel>(
                       result.Select(t => new FeedbackDisplayViewModel
            {
                Id = t.Id,
                Category = t.Category.Name,
                Text = t.Text,
                PostDate = t.PostDate,
                Author = t.UserName,
                Files = t.AttachedFiles.Select(f => f.FilePath)
            }),
                       result.Page,
                       result.PageSize,
                       result.TotalItems
                       ));
        }