2011-03-18 70 views
0

当我用linq更新记录到sql时,我的DeleteLesson()方法被多次调用。LINQ to sql在asp.net中进行多个调用mvc 3

我的控制器看起来是这样的:

public ActionResult Delete(int id) 
    { 

     deleteLesson(id); 

     return Content("<p style=color:red><strong>Deleted...</strong></p>"); 
    } 

    public void deleteLesson(int id) 
    { 
     LLDataContext storeDB = new LLDataContext(); 

      lesson lesson = (from l in storeDB.lessons 
          where l.lessonID == id 
          select l).Single(); 

      lesson.statusID = DELETED; 
      lesson.dateDeleted = DateTime.Now; 
      lesson.deletedByUserID = getAppUserID(); 

      try 
      { 
       storeDB.SubmitChanges(); 
      } 
      catch (Exception e) 
      { 

       Console.WriteLine(e.Message); 

       storeDB.SubmitChanges(); 
      } 
    } 

而我的观点是这样的

@Ajax.ActionLink("Delete", "Delete", 
            new { id = item.lessonID }, 
            new AjaxOptions { 

                 HttpMethod = "POST", 
                 UpdateTargetId = @rowNumber.ToString() 
            } 
            ) 

什么想法?

编辑

另外,如果我在阿贾克斯选择使用confirm = "Do you want to delete"我必须点击好三倍。

+1

这是一个真正的MVC问题,如果我理解正确,那么与LINQ无关。 – BrokenGlass 2011-03-18 17:48:37

+0

你怎么知道该方法被多次调用?调试器是否产生异常? – Zakaria 2011-03-18 17:58:40

+0

我知道它由于几个原因运行多次,如果我设置了一个中断点,它将触发deleteLesson()三次。它也会引发重复的行异常。 – marknery 2011-03-18 19:01:47

回答

0

您是否获得了一个帖子和一个打电话给它?
尝试使

public ActionResult Delete(int id) 

[HttpPost()] 
public ActionResult Delete(int id) 

特定的HTTP POST IMO。你真的希望用户浏览到/ Lesson/Delete/5,并让它工作吗?我认为你只想从回显中处理他们将要删除的课程。

+0

顶行被切断,仅作为上面的[HttpPost]使用。 – marknery 2011-03-18 18:59:15