public IActionResult Index(SortState sortState = SortState.GenreNameAsc, int page = 1) { GenresFilterViewModel filter = HttpContext.Session.Get <GenresFilterViewModel>(filterKey); if (filter == null) { filter = new GenresFilterViewModel { GenreName = string.Empty, GenreDescription = string.Empty }; HttpContext.Session.Set(filterKey, filter); } string modelKey = $"{typeof(Genre).Name}-{page}-{sortState}-{filter.GenreName}-{filter.GenreDescription}"; if (!cache.TryGetValue(modelKey, out GenresViewModel model)) { model = new GenresViewModel(); IQueryable <Genre> genres = GetSortedEntities(sortState, filter); int count = genres.Count(); int pageSize = 10; model.PageViewModel = new PageViewModel(page, count, pageSize); model.Entities = count == 0 ? new List <Genre>() : genres.Skip((model.PageViewModel.CurrentPage - 1) * pageSize).Take(pageSize).ToList(); model.SortViewModel = new SortViewModel(sortState); model.GenresFilterViewModel = filter; cache.Set(modelKey, model); } return(View(model)); }
private IQueryable <Genre> GetSortedEntities(SortState sortState, GenresFilterViewModel filterModel) { IQueryable <Genre> genres = db.Genres.AsQueryable(); switch (sortState) { case SortState.GenreNameAsc: genres = genres.OrderBy(g => g.GenreName); break; case SortState.GenreNameDesc: genres = genres.OrderByDescending(g => g.GenreName); break; case SortState.GenreDescriptionAsc: genres = genres.OrderBy(g => g.GenreDescription); break; case SortState.GenreDescriptionDesc: genres = genres.OrderByDescending(g => g.GenreDescription); break; } if (!string.IsNullOrEmpty(filterModel.GenreName)) { genres = genres.Where(g => g.GenreName.Contains(filterModel.GenreName)).AsQueryable(); } if (!string.IsNullOrEmpty(filterModel.GenreDescription)) { genres = genres.Where(g => g.GenreDescription.Contains(filterModel.GenreDescription)).AsQueryable(); } return(genres); }
public IActionResult Index(GenresViewModel filterModel) { GenresFilterViewModel filter = HttpContext.Session.Get <GenresFilterViewModel>(filterKey); if (filter != null) { filter.GenreName = filterModel.GenresFilterViewModel.GenreName; filter.GenreDescription = filterModel.GenresFilterViewModel.GenreDescription; HttpContext.Session.Remove(filterKey); HttpContext.Session.Set(filterKey, filter); } return(RedirectToAction("Index", new { page = 1 })); }