我是.NET MVC(学习)的新手。我在Controller中有以下方法(这不是干净的代码,我正在学习)
[HttpPost]
public ActionResult Edit(ProductCategoryLocation viewModel)
{
if (ModelState.IsValid)
{
var product = viewModel.Product;
product.Category = db.Categories
.Where(c => c.ID == viewModel.CategoryID).Single();
db.Entry(product).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(viewModel);
}
视图模型具有产品,位置和类别类型以及CategoryID和LocationID。在POST方法中,我从视图模型中获取类别ID,更新产品的类别,然后将模型更新到数据库。除手动更改的类别外,将保存对产品属性的任何更改。
是否有错误/我错过了什么? 这是使用View Model进行更新的正确方法吗?
答案 0 :(得分:0)
您可以直接将CategoryID
视图模型分配给产品的CategoryID
。这样您就不必从数据库中检索类别。
[HttpPost]
public ActionResult Edit(ProductCategoryLocation viewModel)
{
if (ModelState.IsValid)
{
var product = viewModel.Product;
product.CategoryID = viewModel.CategoryID;
db.Entry(product).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(viewModel);
}
如果您没有标量属性CatagoryID
,则必须在Product
类
public class Product
{
public int ID { get; set; }
//other properties
public int CategoryID { get; set; }
public virtual Category Category { get; set; }
}