2011-07-15 45 views
0

這是我的第一個mvc 3項目,我正在使用linq到sql。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

您需要先從數據庫中獲取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);可能會有所不同。

+0

我已經做到了。首先,我根據ID獲取內容,然後填充編輯表單。點擊保存按鈕後,發送新的副本到控制器。不知道爲什麼它不工作。 – qinking126

+2

您需要在'HttpPost'編輯操作方法中再次執行此操作。 – Dirk

0

當您調試時,您是否在控制器中達到Post操作?確保您的表單操作設置爲POST而不是GET。

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

你的教程對象不是由db上下文管理的。因此當您更改馴服對象並調用tutContext.SubmitChanges()時,上下文不會保存對象更改。

首先,您必須從上下文中查找教程對象。

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

後,你會得到TUTS對象形成TUTS背景下,TUTS對象由db上下文管理。那麼你可以修改馴服對象並提交更改。

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

您需要這在[HttpPost]