ASP.NET MVC如何防止重新POST

时间:2013-10-23 20:56:52

标签: asp.net-mvc asp.net-mvc-4

使用MVC 4.

当我们的网站上下订单时,订单会发布到:

    [HttpPost]
    public ActionResult ConfirmOrder(ABCModel model)
    {
        //Do Stuff
        return View("ConfirmedOrder", model);
    }

用户会看到确认页面。

如果他们在浏览器中按REFRESH,则会再次发送POST页面。

MVC中是否有办法再次阻止POST,可能是重定向还是某种类型?

2 个答案:

答案 0 :(得分:9)

而不是做

return View("ConfirmedOrder", model)

将您的确认逻辑分离到控制器并执行

return RedirectToAction("ConfirmOrderActionName")

此处,ConfirmOrderActionName控制器可以从数据存储中检索订单信息,并将其发送到自己的视图或ConfirmedOrder视图。

P.S。

请注意,RedirectToAction()辅助方法也会返回ActionResult类型(就像返回View()一样)。

如果您有兴趣,请参阅:

MSDN: Controllers and Action Methods in ASP.NET MVC ApplicationsMSDN: ActionResult Class

答案 1 :(得分:1)

您可能想稍微重新设计逻辑。这是购物车结账时的命令问题。

以下是大多数购物车的工作原理 -

Step 1. Cart (Create a Session here)

... Shipping, Payment and so on

Step 2: ConfirmOrder - Get (If no Session, redirect to Cart page.)
        ConfirmOrder - Post (If no Session, redirect to Cart page. If valid and 
                             check out successful, redirect to Complete page)

Step 3: Complete (Clear the Session)