public BrowseProductsPage() { InitializeComponent(); if (BindingContext is BrowseProductsViewModel vm) { _viewModel = vm; _viewModel.PropertyChanged += BindingContextPropertyChanged; } }
// GET: Products public ActionResult Index(string search, string category, int?page) { //initialize the viewmodel BrowseProductsViewModel model = new BrowseProductsViewModel(); var products = db.Products.Include(p => p.Categories); int pageNumber = (page ?? 1); //fill products depending on category or search if (String.IsNullOrEmpty(category) || category.Equals("All")) { model.ActiveCategory = "All"; products = db.Products.Include(p => p.Categories); } else { model.ActiveCategory = category; products = db.Products.Include(p => p.Categories).Where(s => s.Categories.CategoryName.Equals(category)); } if (!String.IsNullOrEmpty(search)) { model.Search = search; products = db.Products.Include(p => p.Categories).Where(s => s.Name.Contains(search)); } else { model.Search = ""; } model.Products = products.OrderBy(a => a.Id).ToPagedList(pageNumber, pageSize); //fill categories var categories = db.Categories; model.Categories = categories.ToList(); return(View(model)); }
/// <summary> /// Visitors can "Search" by for a product by Product Keyword (in either the name or description) /// Product result pages are paged and displayed in such a way (beyond the stand EF grid) to show Thumbnail Images, Descriptions, pricing etc. /// Visitors can browse Products by Category /// Visitors can view a single product in more "detail" (with full sized images), and add it to their "cart" (including product qty) /// </summary> /// <param name="categoryId"></param> /// <param name="searchQuery"></param> /// <param name="page"></param> /// <returns></returns> public async Task <IActionResult> Index(int?categoryId, string searchQuery, int?page) { var catagories = StoreContext.Catagories.AsNoTracking().ToList(); var productsQuery = from storeItem in StoreContext.Products .AsNoTracking() .Include(storeItem0 => storeItem0.ProductImages) select storeItem; if (!string.IsNullOrWhiteSpace(searchQuery)) { productsQuery = productsQuery.Where(storeItem => storeItem.Name.Contains(searchQuery) || storeItem.Description.Contains(searchQuery)); } if (categoryId != null) { var categoryIdValue = categoryId.GetValueOrDefault(); productsQuery = productsQuery.Where(product => product.CatagoryId == categoryIdValue); } productsQuery = productsQuery.OrderBy(product => product.Name); const int pageSize = 4; var products = await PaginatedList <Product> .CreateAsync(productsQuery, page ?? 1, pageSize); var viewModel = new BrowseProductsViewModel { Categories = catagories, Products = products, CategoryId = categoryId, SearchQuery = searchQuery }; return(View(viewModel)); }