确认表单重新提交 - ASP.NET 5 MVC

问题描述 投票:0回答:3

我有两个控制器

Booking
Checkout
。 将表单数据从控制器
Booking
发布到
Checkout
索引获取页面。

我想检索从

Checkout
单击后退按钮到
Booking
索引获取页面时提交的对象。

(即使我在结帐页面时刷新页面,也会出现相同的错误)

Confirm Form Resubmission
This webpage requires data that you entered earlier in order to be properly displayed. 
You can send this data again, but by doing so you will repeat any action this page previously performed.
Press the reload button to resubmit the data needed to load the page.

ERR_CACHE_MISS

预订控制器

public async Task<IActionResult> Index(CarsBookingVM carsBooking)
{
    return View(carsBooking);
}

BookingIndex.cshtml

<form asp-controller="Checkout" asp-action="Index">
<input hidden value="@Model.CarId" name="carId">
<input type="submit" value="Proceed">
</form>

结帐控制器

[HttpGet]
public async Task<IActionResult> Index(int? carId)
{
    BookingVM booking = new BookingVM(){
    //...

    return View(booking);
}

[HttpPost]
public async Task<IActionResult> Create(BookingVM booking)
{
    //...
}
.net asp.net-mvc asp.net-core asp.net-web-api .net-5
3个回答
3
投票

简单的peazy,只需在表单标签中设置method =“get”,如下所示:

<form asp-controller="Checkout" asp-action="Index" method="get"  >
    <input hidden value="@Model.CarId" name="carId">
    <input type="submit" value="Proceed">
</form>

浏览器关心“post”而不是“get”。


0
投票

由于网络开发人员的草率编码实践,浏览器被迫添加此消息。场景如下:

  1. 用户填写表格并提交(帖子表格)
  2. 服务器处理发布数据并响应一个标记为不可缓存的新页面(确认)
  3. 用户导航到新页面。
  4. 用户按返回:

浏览器要显示步骤2中的页面,由于其标记为无缓存,因此必须向服务器请求,即重新发布数据(执行步骤1)。这是草率编码的情况,如果这是信用卡收费,并且服务器上没有重新发布检测,则该卡会被收取两次费用。这是一个非常常见的问题,浏览器必须检测到这一点并警告用户。

最好的修复方法是在第二步中,服务器发送重定向到确认页面。那么当用户通过历史记录或返回访问确认时,它是一个 get 请求,而不是 post 请求,并且不会显示警告。


0
投票

请先生,我需要你的帮助,我不是教育人士,我不会 100% 说英语,也不是移动运营平等的东西,Facebook 了解电报导师财务,但我不明白一切,所以我错了,真的很抱歉,但抱歉我需要你的帮助,我已经设置了我的手机,我正在尝试财务计划,我不是生意,不是投资者,我的国家孟加拉国,如果你不介意的话,我没有一天,只为银行账户我的国家我的国家孟加拉国这个如果您不介意的话,我已经将它们设置为我的手机,谢谢您

© www.soinside.com 2019 - 2024. All rights reserved.