/// <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; }
/// <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)); }
/// <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())); } }
/// <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 )); }