public IActionResult Index(ListenersFilterViewModel filterModel, int page)
        {
            ListenersFilterViewModel filter = HttpContext.Session.Get <ListenersFilterViewModel>(filterKey);

            if (filter != null)
            {
                filter.Name     = filterModel.Name;
                filter.Age      = filterModel.Age;
                filter.FromDate = filterModel.FromDate;
                filter.ToDate   = filterModel.ToDate;

                HttpContext.Session.Remove(filterKey);
                HttpContext.Session.Set(filterKey, filter);
            }

            return(RedirectToAction("Index", new { page }));
        }
        // GET: Listeners
        public async Task <IActionResult> Index(SortState sortState = SortState.ListinersNameAsc, int page = 1)
        {
            ListenersFilterViewModel filter = HttpContext.Session.Get <ListenersFilterViewModel>(filterKey);

            if (filter == null)
            {
                filter = new ListenersFilterViewModel
                {
                    Name     = string.Empty,
                    Age      = null,
                    FromDate = null,
                    ToDate   = null
                };
                HttpContext.Session.Set(filterKey, filter);
            }

            string key = $"{typeof(Listener).Name}-{page}-{sortState}-{filter.Name}-{filter.Age}-{filter.FromDate}-{filter.ToDate}";

            if (!_cache.TryGetValue(key, out ListinerViewModel model))
            {
                model = new ListinerViewModel();

                IQueryable <Listener> listeners = GetSortedListeners(sortState, filter.Name, filter.Age, filter.FromDate, filter.ToDate);

                int count = listeners.Count();

                model.PageViewModel = new PageViewModel(page, count, pageSize);

                model.Listeners = count == 0
                    ? new List <Listener>()
                    : listeners.Skip((model.PageViewModel.PageIndex - 1) * pageSize).Take(pageSize).ToList();
                model.SortViewModel            = new SortViewModel(sortState);
                model.ListenersFilterViewModel = filter;

                _cache.Set(key, model);
            }
            return(View(model));
        }