假设用户删除记录,然后按后退箭头,并重新提交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();
}
}
答案 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