【问题标题】:How can I prevent form resubmission in MVC如何防止在 MVC 中重新提交表单
【发布时间】:2018-06-13 02:09:36
【问题描述】:

我现在的情况如下。 我有一个表单,当它被提交时,将模型传递给控制器​​,它会做它需要做的事情。最后,它重定向到一个确认页面,该页面也通过了相同的模型。所有这一切都很好,除了当我在确认页面上时,每当我重新加载页面时,它都会重新提交表单。

我尝试过使用 TempData,但是当我使用它时,它需要我的模型可序列化,并且我的模型使用其中的其他模型,这些模型由其他人制作,都需要可序列化,这将导致 15-20不同的类都需要变得可序列化,这似乎不合理。

以下是我正在使用的一些内容:

[HttpPost]
public async Task<ActionResult> SubmitClaim(WarrantyClaim model)
{ 
       ... code ...
      return BeddingWarrantyConfirmation(model);
}

public ActionResult BeddingWarrantyConfirmation(WarrantyClaim model)
{
    return View("BeddingWarrantyConfirmation",model);
}

【问题讨论】:

  • 你应该研究一下“Post-Redirect-Get”模式。
  • 如果您正在编写像return View("etc") 这样的代码,那么您不是 重定向。该术语意味着very specific。如果您进行重定向,则不会出现此问题。
  • 使用PRG Patten

标签: c# asp.net-mvc


【解决方案1】:

您可以使用 Post Redirect Get Pattern。您可以在SubmitClaim 中返回以下内容:

return RedirectToAction("BeddingWarrantyConfirmation", "CONTROLLER", model);

更多信息请见https://en.wikipedia.org/wiki/Post/Redirect/Get

【讨论】:

  • 所以我尝试这样做,一旦它真正进入“BeddingWarrantyConfirmation”操作,我的模型部分变为空,以前不是空的。
  • 好吧,您能否进一步解释一下,您的模型的哪些部分是空的?此外,您必须记住 RedirectToAction 将在客户端上再次执行 GET 请求。因此,值应该在查询参数中发送。
【解决方案2】:

这是MVC开发中的常见问题,可以按照Post/Redirect/Get策略来避开请求。

https://en.wikipedia.org/wiki/Post/Redirect/Get

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 2019-07-20
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多