处理删除操作的用户重新提交的正确方法?

时间:2011-01-31 23:39:28

标签: asp.net-mvc error-handling asp.net-mvc-3 crud

假设用户删除记录,然后按后退箭头,并重新提交POST请求。

我在处理此方案时有哪些选择?

什么是首选?

 [HttpPost]
    public ActionResult Delete(string EntryName, Guid id, FormCollection collection)
    {
        try
        {
            var ret =  from m in _entities.MyList 
                      where m.MyListID == id
                      && m.EntryName == EntryName
                      select m ;

            if (ret.Count() == 0)
            {
                // This happens if the user pressed the back button and resubmitted
                // todo: ask SO what is the best way to approach this... 
                 // User feedback? How?
                return RedirectToAction("Index", new { id = id });
            }

            _entities.DeleteObject(ret.FirstOrDefault());
            _entities.SaveChanges();

            return RedirectToAction("Index", new { id = id  } );
        }
        catch
        {
            return View();
        }
    }

2 个答案:

答案 0 :(得分:2)

RESTFul处理此问题的方法是抛出404 Not Found(因为用户试图删除不再存在的记录):

if (ret.Count() == 0)
{
    throw new HttpException(404, "Not found");
}

另一种方法是在模型状态中添加错误并重新显示视图:

if (ret.Count() == 0)
{
    ModelState.AddModelError("id", "An item with the specified id was not found");
    return View();
}

在视图内部,您将获得id的验证摘要或验证消息以显示消息。

P.S。:好的TODO评论: - )

答案 1 :(得分:0)

在这种情况下,您想要使用TempData。

 if (ret.Count() == 0)
 {
   TempData["ErrorMessage"] = "Record <Number> does not exist";
   return RedirectToAction("Index");

}

然后,您可以在视图中访问TempData以显示消息。有关详细信息,请参阅此link