У меня есть категориявивмодель следующим образом:
public class CategoryViewModel
{
public string Id {get; set;}
public string Name { get; set; }
public IEnumerable<SelectListItem> Products { get; set; }
public List<string> SelectedProductIds { get; set; }
}
Метод GET CategoryController использует эту категорию ViewModel для создания объекта и добавляет все продукты в этот объект CategoryViewModel. Затем он проходит через все продукты и устанавливает выбранное свойство продуктов на True, которые включены в объект категории:
public ActionResult CategoryController(string categoryId)
{
CategoryDbContext db = new CategoryDbContext();
CategoryRepository CategoryRepo = new CategoryRepository(db);
ProductRepository ProductRepo = new ProductRepository(db);
Category category = CategoryRepo.GetCategory(categoryId);
CategoryViewModel categoryView = new CategoryViewModel()
{
Id = category.Id,
Name = category.Name,
Products = from product in ProductRepo.GetAllProducts()
select new SelectListItem { Text = product.Name, Value = product.Id, Selected = false}
};
foreach (var product in category.Products)
{
categoryView.Products.Where(x => x.Value == product.Id).FirstOrDefault().Selected = true;
}
return View(categoryView);
}
Используя отладчик, я наблюдаю, что Foreach выполняет, но CategyRyView имеет все продукты с выбранным свойством, все еще установленным на False.
Однако этот работает нормально:
public ActionResult CategoryController(string categoryId)
{
CategoryDbContext db = new CategoryDbContext();
CategoryRepository CategoryRepo = new CategoryRepository(db);
ProductRepository ProductRepo = new ProductRepository(db);
Category category = CategoryRepo.GetCategory(categoryId);
CategoryViewModel categoryView = new CategoryViewModel()
{
Id = category.Id,
Name = category.Name,
Products = from product in ProductRepo.GetAllProducts()
select new SelectListItem { Text = product.Name, Value = product.Id, Selected = category.Products.Contains(product)}
};
return View(categoryView);
}
Может ли кто -нибудь объяснить разницу и почему первый не работает?
РЕДАКТИРОВАТЬ:Я использую EF 6, а продукты и категории хранятся в базе данных с отношениями многих ко многим.