5

使用 MVC 4。

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

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

用户看到已确认页面。

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

MVC 中有没有办法再次阻止 POST,可能是重定向或某种方式?

4

2 回答 2

10

而不是做

return View("ConfirmedOrder", model)

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

return RedirectToAction("ConfirmOrderActionName").

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

附言

请注意,RedirectToAction()辅助方法还返回一种类型ActionResult(就像返回 aView()一样)。

有兴趣可以看看:

MSDN:ASP.NET MVC 应用程序中的控制器和操作方法MSDN:ActionResult 类

于 2013-10-23T21:12:28.920 回答
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)
于 2013-10-23T21:15:02.883 回答