У меня возникают проблемы с получением выбранных элементов в списке выбора.
Product product = _pr.GetProducts().ByProductID(productID).First();
product.Categories.Load();
ICollection<Category> allCategories = _cr.GetCategories().ToList();
List<SelectListItem> Categories = (from category in allCategories
select
new SelectListItem
{
Selected = product.Categories.Contains(category),
Value = category.CategoryID.ToString(),
Text = category.Categoryname
}).ToList();
Категории возвращают 4 элемента, и выбрано значение false для всех....... Если я нахожу "product.Categories", там есть 3 элемента, что правильно.... но почему-то он не получает значение true,
Что может быть неправильным? /М
Перегрузка Contains()
, которую вы используете, будет использовать сравнение объектов по умолчанию, которое будет соответствовать только одному экземпляру, если вы не переопределили Equals()
и GetHashCode()
. Один из вариантов - создать пользовательский CategoryEqualityComparer
и передать его в эту перегрузку Contains()
. Или вы можете просто присоединиться к категориям по ID:
Product product = _pr.GetProducts().ByProductID(productID).First();
product.Categories.Load();
ICollection<Category> allCategories = _cr.GetCategories().ToList();
List<SelectListItem> Categories = (
from category in allCategories
join pc in product.Categories
on category.CategoryID equals pc.CategoryID into j
select
new SelectListItem
{
Selected = j.Any(),
Value = category.CategoryID.ToString(),
Text = category.Categoryname
}).ToList();
Я вижу, что вы установили 'allCategories' в коллекцию _cr.GetCategories - уверены ли вы, что продукт содержит категории из этой коллекции? Похоже, что поле "Категории" не содержит ни одной из категорий продуктов. Можете ли вы разместить то, что находится в каждой коллекции?