Пример #1
0
 public BrowseProductsPage()
 {
     InitializeComponent();
     if (BindingContext is BrowseProductsViewModel vm)
     {
         _viewModel = vm;
         _viewModel.PropertyChanged += BindingContextPropertyChanged;
     }
 }
Пример #2
0
        // 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));
        }
Пример #3
0
        /// <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));
        }