日期:2014-05-17  浏览次数:20423 次

学习MVC中,碰到问题:新增删除有效,更新无效,求解~~
视图的部分代码:
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做更新