コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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 }));
        }