public async Task <IActionResult> Index(string Search = null, int?Program = null, string Categories = null, string Group = null, bool Favorites = false, string Status = null, int page = 1, ChallengeFilter.OrderingOption ordering = ChallengeFilter.OrderingOption.MostPopular, System.Net.HttpStatusCode httpStatus = System.Net.HttpStatusCode.OK) { var filter = new ChallengeFilter(page) { Ordering = ordering }; if (!string.IsNullOrWhiteSpace(Search)) { filter.Search = Search; } if (Program.HasValue) { filter.ProgramIds = new List <int?> { Program }; } if (!string.IsNullOrWhiteSpace(Categories)) { var categoryIds = new List <int>(); foreach (var category in Categories.Split(',')) { if (int.TryParse(category, out int result)) { categoryIds.Add(result); } } filter.CategoryIds = categoryIds; } if (AuthUser.Identity.IsAuthenticated) { filter.Favorites = Favorites; if (string.IsNullOrWhiteSpace(Status) || string.Equals(Status, StatusUncompleted, StringComparison.OrdinalIgnoreCase)) { filter.IsCompleted = false; } else if (string.Equals(Status, StatusCompleted, StringComparison.OrdinalIgnoreCase)) { filter.IsCompleted = true; } } ChallengeGroup challengeGroup = null; if (!string.IsNullOrWhiteSpace(Group)) { challengeGroup = await _challengeService.GetActiveGroupByStubAsync(Group); if (challengeGroup != null) { filter.GroupId = challengeGroup.Id; } PageTitle = _sharedLocalizer[Annotations.Title.ChallengeGroup, challengeGroup.Name]; } var challengeList = await _challengeService.GetPaginatedChallengeListAsync(filter); var paginateModel = new PaginateViewModel { ItemCount = challengeList.Count, CurrentPage = page, ItemsPerPage = filter.Take.Value }; if (paginateModel.PastMaxPage) { return(RedirectToRoute( new { page = paginateModel.LastPage ?? 1 })); } foreach (var challenge in challengeList.Data) { if (!string.IsNullOrEmpty(challenge.BadgeFilename)) { challenge.BadgeFilename = _pathResolver .ResolveContentPath(challenge.BadgeFilename); } if (challenge.IsCompleted == true) { challenge.Status = _sharedLocalizer[Annotations.Interface.Completed]; } } var siteStage = GetSiteStage(); var isActive = siteStage == SiteStage.ProgramOpen || siteStage == SiteStage.ProgramEnded; var categoryList = await _categoryService.GetListAsync(true); var featuredChallengeGroups = await _challengeService .GetActiveFeaturedChallengeGroupsAsync(); var viewModel = new ChallengesListViewModel { Categories = Categories, CategoryIds = filter.CategoryIds, CategoryList = new SelectList(categoryList, "Id", "Name"), ChallengeGroup = challengeGroup, Challenges = challengeList.Data.ToList(), Favorites = Favorites, FeaturedChallengeGroups = featuredChallengeGroups, IsActive = isActive, IsLoggedIn = AuthUser.Identity.IsAuthenticated, Ordering = filter.Ordering, PaginateModel = paginateModel, Program = Program, ProgramList = new SelectList(await _siteService.GetProgramList(), "Id", "Name"), Search = Search, Status = Status }; if (!string.IsNullOrWhiteSpace(Search)) { HttpContext.Session.SetString(SessionKey.ChallengeSearch, Search); } else { HttpContext.Session.Remove(SessionKey.ChallengeSearch); } HttpContext.Session.SetInt32(SessionKey.ChallengePage, page); if (httpStatus != System.Net.HttpStatusCode.OK) { Response.StatusCode = (int)httpStatus; } return(View(nameof(Index), viewModel)); }