我在模型added
中有实体added_from
,last_edited
,last_edited_from
,Products
。如果有人创建了新的Product
,则四个枚举实体将填充相应的数据;有了这一切都很好。如果有人正在编辑Product
,则只会填充last_edited
个实体,但我在控制器中的方法每次都会覆盖added
个实体并清空它们。
控制器方法:
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Product product= db.Product.Find(id);
if (product== null)
{
return HttpNotFound();
}
ViewBag.Category_id = new SelectList(db.Category, "Id", "Name", product.Category_id);
return View(product);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,Barcode,Name,Category_id,Comment")] Product product)
{
if (ModelState.IsValid)
{
product.last_edited = DateTime.Now;
product.last_edited_from = User.Identity.GetUserId();
db.Entry(product).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.Category_id = new SelectList(db.Category, "Id", "Name", product.Category_id);
return View(product);
}
型号:
public int Id { get; set; }
public double Barcode { get; set; }
[MinLength(3)]
public string Name{ get; set; }
[ForeignKey("Category_id")]
public Category CategoryFK { get; set; }
[Required]
public int Category_id { get; set; }
public DateTime? added { get; set; }
[ForeignKey("added_from")]
public ApplicationUser added_from_User { get; set; }
public string added_from { get; set; }
public DateTime last_edited { get; set; }
[ForeignKey("last_edited_from")]
public ApplicationUser last_edited_from { get; set; }
public string last_edited_from { get; set; }
我尝试了约5个小时,但没有发现任何对我有帮助的事情
答案 0 :(得分:0)
您的帖子在HTML中的含义是什么?我敢打赌它会覆盖这些值,因为你的值没有被传递回帖子。
您可以通过两种方式解决此问题:
更改HTML / Razor以包含“已添加”信息,以便在POST时包含该信息。 (不确定这是否已经发生)。
首先使用它的id进行查找并找到产品,然后正常修改属性。这是最好的选择,因为您不希望将数据库对象传递到视图(然后返回到POST)。产品查找的确切语法可能不合适,但它应足够接近,以便大致了解它正在做什么。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,Barcode,Name,Category_id,Comment")] Product product)
{
if (ModelState.IsValid)
{
var productInDb = db.Products.First(x => x.Id == product.Id);
productInDb.last_edited = DateTime.Now;
productInDb.last_edited_from = User.Identity.GetUserId();
db.Entry(productInDb).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.Category_id = new SelectList(db.Category, "Id", "Name", product.Category_id);
return View(product);
}