Ich habe ein CategoryViewModel wie folgt:
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; }
}
Die GET -Methode von CategoryController verwendet dieses CategoryViewModel, um ein Objekt zu instanziieren, und fügt alle Produkte zu diesem CategoryViewModel -Objekt hinzu. Dann iteriert es alle Produkte und setzt die ausgewählte Eigenschaft von Produkten auf True, die im Kategorieobjekt enthalten sind:
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);
}
Mit dem Debugger stelle ich fest, dass foreach ausgeführt wird, aber CategoryView hat alle Produkte mit ausgewählter Eigenschaft weiterhin auf false.
Dieser funktioniert jedoch gut:
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);
}
Kann jemand bitte den Unterschied erklären und warum der erste nicht funktioniert?
BEARBEITEN:Ich verwende EF 6 und Produkte und Kategorien werden in der Datenbank mit vielen zu vielen Beziehungen gespeichert.