Я боролся с созданием и редактированием модели, которая содержит другую модель как часть ее модели.
Подкатегория содержит категорию в качестве переменной, поскольку она должна иметь возможность ссылаться на нее.
Теперь я решил часть создания, открыв представление списку категорий через ViewBag и связав его с раскрывающимся списком (model => model.Category.ID, new SelectBox .. и т. Д.):
public ActionResult Create()
{
ViewBag.Categories = db.Category.ToList();
return View();
}
[HttpPost]
public ActionResult Create(SubCategory subcategory)
{
subcategory.Category = db.Category.Single(x => x.ID == subcategory.Category.ID);
if (ModelState.IsValid)
{
db.SubCategory.Add(subcategory);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(subcategory);
}
Как вы можете видеть, мне нужно было выполнить приведенное выше быстрое исправление, чтобы подкатегория правильно связывалась с категорией (в подкатегории БД в виде столбца с CategoryID).
Теперь, когда япопытался сделать то же самое для функции редактирования, это не сработало.Ниже приведен мой код редактирования:
public ActionResult Edit(int id)
{
ViewBag.Categories = db.Category.ToList();
SubCategory subcategory = db.SubCategory.Find(id);
return View(subcategory);
}
[HttpPost]
public ActionResult Edit(SubCategory subcategory)
{
subcategory.Category = db.Category.Single(x => x.ID == subcategory.Category.ID);
if (ModelState.IsValid)
{
UpdateModel(subcategory);
db.Entry(subcategory).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(subcategory);
}
Как видите, тот же метод, что и при создании. Используя точку останова, я вижу, что подкатегория.Категория заполнена правильно, но по какой-то причине она не сохраняети после перезагрузки страницы ссылка на CategoryID остается неизменной.
Любые идеи или помощь будут очень ценными, спасибо.
ОБНОВЛЕНИЕ
[HttpPost]
public ActionResult Edit(SubCategory subcategory)
{
subcategory.Category = db.Category.Single(x => x.ID == subcategory.Category.ID);
if (ModelState.IsValid)
{
db.SubCategory.Single(x => x.ID == subcategory.ID).Name = subcategory.Name;
db.SubCategory.Single(x => x.ID == subcategory.ID).Category = db.Category.Single(x => x.ID == subcategory.Category.ID);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(subcategory);
}
Это работает, номои глаза кровоточат, поэтому, если у вас есть лучшее предложение:):