视图的部分代码:
- HTML code
@using (Html.BeginForm("Edit", "Admin")){ @Html.EditorForModel() <input type="submit" value="保存" /> @Html.ActionLink("返回", "Index")}
提交表单之后,执行的是Admin控制器里的Edit方法。如下:
Admin控制器中的Edit方法:
- C# code
[HttpPost] public ActionResult Edit(Product product) { if (ModelState.IsValid) { repository.SaveProduct(product); TempData["message"] = string.Format("{0} 保存成功", product.Name); return RedirectToAction("Index"); } else { // there is something wrong with the data values return View(product); } }
方法中,调用了SaveProduct方法,该方法在实现某个接口的类中:
- C# code
public void SaveProduct(Product product) { if (product.ProductID == 0) { context.Products.Add(product); } else //else 我自己加的,我看的MVC资料里没有这个else语句块 { //context.Products.Attach(product); //这句更新的该怎么写呢?还是说这句压根不用写? } context.SaveChanges(); }
问题:
经过测试,新增是没问题的。但是更新无效。调试发现,更新操作,验证也是通过了,会执行到SaveProduct方法中的else部分。
并且,由于在控制器中有返回操作结果提示,可以发现,点更新后,给出的提示,商品XXX保存成功。这里的XXX,也是修改后的商品,只是没有保存到数据库中去而已。
求解,这句更新的语句该怎么写~~
------解决方案--------------------------------------------------------
你需要根据ID从库中先查出那条记录,然后通过页面更新后的Product来给该记录赋值更新,然后直接context.SaveChanges();
就可以了
------解决方案--------------------------------------------------------
楼上说的对。
你需要先查出来这个model然后在对这个model做更新