public IActionResult Index(ListWithFilterModel model, string searchText)
        {
            ListingType listingType;

            if (!string.IsNullOrEmpty(searchText))
            {
                HttpContext.Session.Remove("filters");
                HttpContext.Session.SetString("search", searchText);
                listingType = ListingType.All;
            }
            else
            {
                HttpContext.Session.Remove("search");
                HttpContext.Session.SetString("filters", JsonConvert.SerializeObject(model.FilterSpecification));
                listingType = model.FilterSpecification.Reason;
            }

            return(RedirectToAction(nameof(Index),
                                    new
            {
                page = Constants.FirstPage,
                sortOptions = SortOptions.Newest,
                listingType
            }));
        }
        public async Task <IActionResult> Index(int page,
                                                SortOptions sortOptions = SortOptions.Newest,
                                                ListingType listingType = ListingType.All)
        {
            var model = new ListWithFilterModel {
                SortOption = sortOptions
            };

            var searchText    = HttpContext.Session.GetString("search");
            var cachedFilters = HttpContext.Session.GetString("filters");

            if (!string.IsNullOrEmpty(searchText))
            {
                model.Search     = searchText;
                model.Properties = await _propertyViewModelService.Search(User.Identity.Name, searchText, model.SortOption);
            }
            else
            {
                if (cachedFilters != null)
                {
                    model.FilterSpecification = JsonConvert.DeserializeObject <PropertyFilterSpecification>(cachedFilters);
                }

                model.FilterSpecification.Reason = listingType;
                model.Properties = await _propertyViewModelService
                                   .ListProperties(User.Identity.Name, model.FilterSpecification, page == 0? 1 : page, Constants.ItemsPerPage,
                                                   model.SortOption);
            }

            await SetCacheEntries();

            return(View(model));
        }