【发布时间】:2013-05-19 06:01:43
【问题描述】:
我一直在努力创建和编辑一个模型,该模型包含另一个模型作为其模型的一部分。
SubCategory 包含 Category 作为变量,因为它需要能够引用回它。
现在我通过 ViewBag 将视图公开到类别列表并将其绑定到下拉列表(模型 => model.Category.ID、新 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);
}
如您所见,我必须在上面进行快速修复以使子类别正确绑定到类别(在 DB 子类别中作为具有 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);
}
如您所见,与创建方法相同,使用断点我看到 subcategory.Category 已正确填充,但由于某种原因它不保存状态,并且在页面重新加载后对 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);
}
这可行,但让我的眼睛流血,所以如果你有更好的建议:):
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-3 entity-framework