linq to sql问题,为什么我的更改未保存?

时间:2011-07-15 22:37:09

标签: asp.net-mvc asp.net-mvc-3 linq-to-sql

这是我的第一个mvc 3项目,我正在使用linq to sql。

    public ActionResult Edit(int ID)
    {

        try
        {
            Tutorial tut = reposi.Tutorials.Single(d => d.TutorialID == ID);
            return View(tut);
        }
        catch
        {

            return RedirectToAction("List");
        }
    }

  [HttpPost]
    public ActionResult Edit(Tutorial tut)
    {
        if (ModelState.IsValid)
        {
            //tut.TutorialID = ID;
            tut.EditDate = DateTime.Now;

            tutContext.SubmitChanges();

            return RedirectToAction("List");
        }
        else
        {
            return View(tut);
        }
    }

点击“编辑”按钮后,它会将我带回列表页面,并且不会保存更改。仍旧的价值观。

3 个答案:

答案 0 :(得分:3)

您需要先从数据库中获取Tutorial,然后进行更改,然后SubmitChanges()

[HttpPost]
public ActionResult Edit(Tutorial tut)
{
    if (ModelState.IsValid)
    {
        Tutorial t = tutContext.get(tut.Id);

        //tut.TutorialID = ID;
        t.EditDate = DateTime.Now;

        tutContext.SubmitChanges();

        return RedirectToAction("List");
    }
    else
    {
        return View(tut);
    }
}

注意,根据您的实施情况,您的tutContext.get(tut.Id);可能会有所不同。

答案 1 :(得分:2)

tut.EditDate = DateTime.Now;
tutContext.SubmitChanges();
return RedirectToAction("List");

您的教程对象尚未由db context管理。因此,当您更改tut对象并调用tutContext.SubmitChanges()时,上下文不会保存对象更改。

首先,您必须从上下文中查找教程对象。

Tutorial tut = ctx.Tutorials.Single(d => d.TutorialID == ID);

从tuts上下文获取tuts对象后,tuts对象由db上下文管理。然后你可以修改tut对象并提交更改。

Tutorial tut = ctx.Tutorials.Single(d => d.TutorialID == tut.ID);
tut.EditDate = DateTime.Now;
ctx.SubmitChanges();

您需要[HttpPost]

答案 2 :(得分:0)

调试时,是否到达控制器中的Post操作?确保您的表单操作设置为POST而不是GET。