0
在產品列表中的一個產品單擊刪除超鏈接將調用/Product/Delete
HTTPGET操作方法。然後用戶點擊確認按鈕以調用/Product/Delete
HttpPost操作方法,該操作方法又將用戶重定向到/Product/Deleted
HttpGet操作方法。
我想阻止用戶跳過/Product/Delete
並直接調用/Product/Deleted
。
在產品列表中的一個產品單擊刪除超鏈接將調用/Product/Delete
HTTPGET操作方法。然後用戶點擊確認按鈕以調用/Product/Delete
HttpPost操作方法,該操作方法又將用戶重定向到/Product/Deleted
HttpGet操作方法。
我想阻止用戶跳過/Product/Delete
並直接調用/Product/Deleted
。
重定向之前把東西放入TempData
。然後在Deleted
操作中驗證這個東西是否存在於TempData
中。
[HttpPost]
public ActionResult Delete()
{
// TODO: Delete
TempData["deleted"] = true;
return RedirectToAction("deleted");
}
public ActionResult Deleted()
{
if(TempData["deleted"] == null)
{
throw new HttpException(404, "not found");
}
return View();
}
您應該知道,有這樣的代價是值得的。如果用戶按F5,同時瀏覽/product/deleted
動作,他將得到404。所以基本上你想要做的是壞設計,我會建議你避免它。
謝謝@Darin Dimitrov。 – xport 2010-12-21 10:13:50
值得指出的是,當您執行導致狀態更改的操作時,應該優先使用POST。從長遠來看,使用這種分離方式會使你受益匪淺。 – 2010-12-21 10:18:54
@Darin,我認爲我們應該在'Deleted()'''返回View()'之前將'TempData [「刪除」]'設置爲'null'以避免多次調用? – xport 2010-12-21 10:20:01