Beispiel #1
0
        public async Task <ActionResult> Search(
            [FromQuery(Name = "s")] string search,
            [FromQuery(Name = "o")] string sortOrder,
            [FromQuery(Name = "p")] int?page,
            [FromQuery(Name = "c")] int?pageCount,
            [FromQuery(Name = "cat")] int[] categoryIds)

        {
            if (sortOrder.IsNullOrEmpty())
            {
                sortOrder = nameof(ProductDto.Name);
            }

            var currPage     = page ?? 1;
            var countPerPage = pageCount == null || pageCount <= 0 ? 15 : pageCount.Value;

            SortPageResult <Product> result =
                await _shopManager.GetSortFilterPageAsync(ItemTypeSelector.Enabled, currPage, countPerPage,
                                                          search, sortOrder, categoryIds);

            var allCategories =
                _mapper.Map <IEnumerable <CategoryDto> >(await _shopManager.GetAllCategoriesAsync());

            ViewBag.itemCount = result.TotalN;

            //TODO mapper
            var model = new SearchViewModel()
            {
                CurrentSearch    = search,
                CurrentSortOrder = sortOrder,
                Descending       = sortOrder.EndsWith("_desc"),
                CurrentPage      = currPage,
                CountPerPage     = countPerPage,
                ItemCount        = result.TotalN,
                CategoryIds      = categoryIds,
                FilteredItems    = _mapper.Map <IEnumerable <ProductDto> >(result.FilteredData),
                AllCategories    = allCategories
            };

            if (!search.IsNullOrEmpty())
            {
                IEnumerable <Category> filteredCategories = await _shopManager.SearchCategoriesByName(search);

                model.FilteredCategories = _mapper.Map <IEnumerable <CategoryDto> >(filteredCategories);
            }

            return(View(model));
        }