Witam,
piszę sklep internetowy i napotkałem pewien problem. Na stronie głównej mam formularz search, po wpisaniu nazwy produktu, daję szukaj i z pomocą AJAX-u podmienia mi część kodu widoku produktów z pełnej listy na wyselekcjonowane przez search. Tu jest ok.
Problem zaczyna się po wybraniu którejś z kategorii, tam też mam widok z produktami o CategoryID takim jak wybrana kategoria. Nasuwa się pytanie jak sformułować zapytanie LINQ tak aby pobierało ono produkty tylko i wyłącznie ze wskazanym CategoryID. Na ten czas URL po wejściu w kategorię wygląda tak:
http://localhost:60804/Products/ProductCategory?CategoryID=6
A po wyszukaniu poprzez formularz jakiegośproduktu zmienia się na:
http://localhost:60804/Products/ProductCategory?searchQuery=Pierwszy+produkt+testowy
i wychodzi mi error log:
The parameters dictionary contains a null entry for parameter 'CategoryID' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult ProductCategory(Int32)' in 'NESTshop.DAL.ProductsController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters
Zarzucę kodu troszkę:
ProductController (kontrolka odpowiedzialna między innymi za wyświetlanie listy produktów o danym CategoryID):
public ActionResult ProductCategory(int CategoryID)
{
var products = db.Product.Where(x => x.CategoryID == CategoryID).ToList();
return View(products);
}
A tak naskrobałem na HomeController
public ActionResult ProductsList(string searchQuery = null, int? CategoryID=null)
{
var products = productRepo.GetProduct().Where(p => (searchQuery == null || p.ProductTitle.ToLower().Contains(searchQuery.ToLower()) && !p.IsHidden));
if (Request.IsAjaxRequest())
{
return PartialView(products);
}
return PartialView(products);
i działa bez zarzutu. Czy mógłby ktoś podpowiedzieć jak to napisać?