Cześć
Chcę na swojej stronie zrobić filtrowanie produktów i ich wyświetlanie.
Mam akcję kontrolera Search, do którego przekazuje wypełniony kryteriami wyszukiwania view model, a następnie przekazuję go do metody serwisu, która zwraca mi nowy view model (zaktualizowany o wyniki wyszukiwania) i wysyłam do widoku.
[HttpGet]
public virtual ActionResult Search(ProductSearchViewModel searchViewModel)
{
var viewModel = productService.GetProductSearchViewModel(searchViewModel);
return View(viewModel);
}
public class ProductSearchViewModel
{
public string Name { get; set; }
public List<int> Manufacturer { get; set; }
public int Category { get; set; }
public decimal PriceFrom { get; set; }
public decimal PriceTo { get; set; }
public int Rating { get; set; }
public int Page { get; set; }
public int PageSize { get; set; }
public int TotalPages { get; set; }
public string Mode { get; set; }
public Dictionary<string, int> AvaibleManufacturers { get; set; }
public List<ProductViewModel> Products { get; set; }
public ProductSearchViewModel()
{
Manufacturer = new List<int>();
AvaibleManufacturers = new Dictionary<string, int>();
Products = new List<ProductViewModel>();
}
}
Metoda serwisu, która zwraca view model (dla kontrolera)
public ProductSearchViewModel GetProductSearchViewModel(ProductSearchViewModel viewModel, int pageSize = 6, int page = 1, string sort = "")
{
var searchCriteria = Mapper.Map<SearchCriteria>(viewModel);
var products = GetProducts(searchCriteria, sort);
var totalPages = GetTotalPages(products, pageSize);
var manufacturers = context.Products.Where(x => x.CategoryId == searchCriteria.Category)
.Select(x => x.Manufacturer).Distinct();
viewModel = new ProductSearchViewModel()
{
TotalPages = totalPages,
Page = page,
PageSize = pageSize,
Manufacturer = searchCriteria.Manufacturer,
Category = searchCriteria.Category,
};
foreach (var item in products)
viewModel.Products.Add(Mapper.Map<ProductViewModel>(item));
foreach (var item in manufacturers)
viewModel.AvaibleManufacturers.Add(item.Name, item.Id);
return viewModel;
}
public List<Product> GetProducts(SearchCriteria search, string sort)
{
var products = context.Products.Where(x => x.CategoryId == search.Category).AsEnumerable();
products = FilterProducts(products, search);
products = SortProducts(products, sort);
return products.ToList();
}
Czy ktoś mógłby rzucić okiem i powiedzieć, czy odpowiednio się do tego zabieram?