.Net Core 页面未缓存并在单击浏览器后退按钮时出现“ERR_CACHE_MISS”错误页面
.Net Core page is not caching and getting “ERR_CACHE_MISS” error page clicking browser back button
几天来我一直在努力解决这个问题,但一点运气都没有。
我们在数据表的 foreach 循环中有一个“细节”@Html.ActionLink。
然后在“结果”控制器中,我们使用 HTTPGet 和 HTTPPost 操作来填充此数据表。
此处列出了结果控制器代码……。 https://localhost:5003/Outcomes/ByProcedure
[HttpGet]
public IActionResult ByProcedure()
{
…code to get result list
return View(result);
}
[HttpPost]
public IActionResult ByProcedure(IFormCollection form, string submitForm)
{
…after clicking submit button we take form input date pickers for start and end dates and pass in to get list
return View(result);
}
当我单击详细信息时 link 它会转到另一个“报告”控制器和如下所示的操作
<tr>
<td class="detailslink">@Html.ActionLink("Details", "ByProcedureDetailView", "Reports", new { @id = item.ProcTypeID }, null)</td>
</tr>
这是“报告”控制器中的操作结果:https://localhost:5003/reports/ByProcedureDetailView/7
[HttpGet]
public IActionResult ByProcedureDetailView()
{
code to load another datatable…
return View(result);
}
数据表在此页面中填充正常。
但是,如果我们从该页面单击后退按钮,就会出现问题
https://localhost:5003/reports/ByProcedureDetailView/7
到此页面:
https://localhost:5003/Outcomes/ByProcedure
我们收到以下消息,并在单击后退按钮后在 Dev Tools 中看到。
这发生在 Chrome、Safari 和 IE 等

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
我在 Internet 上找遍了,没有找到任何有用的东西。
如有任何帮助,我们将不胜感激。
This is the behavior of the browser.
如果提交页面是购物车结账页面,并且服务器没有进行转载检测,那么用户将被收取两次费用。这是一个非常常见的问题,浏览器必须检测到这一点并警告用户。
通常我们使用PRG pattern来解决这个问题,或者使用TempData
.
可以参考.
你的情况可以结合以上两种方法解决。
我创建了一个简单的演示,您可以参考如下:
[HttpGet]
public IActionResult ByProcedure()
{
var result = _context.Cobro.ToList();
var value = TempData["Cobro"];
if (value is string json)
{
result = JsonConvert.DeserializeObject<List<Cobro>>(json);
}
return View(result);
}
[HttpPost]
public IActionResult ByProcedure(IFormCollection form, string submitForm)
{
var result = _context.Cobro.ToList().Where(x => x.Telefono == submitForm).ToList();
TempData["Cobro"] = JsonConvert.SerializeObject(result);
TempData["Name"] = submitForm;
return RedirectToAction(nameof(ByProcedure));
}
查看:
@model IEnumerable<WebApplication_core_mvc.Models.Cobro>
@{
ViewData["Title"] = "ByProcedure";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>ByProcedure</h1>
<form asp-action="ByProcedure">
<input id="Text1" type="text" name="submitForm" value="@TempData["Name"]"/>
<table class="table table-bordered">
<tr>
<th>Telefono</th>
<th>Empresa</th>
<th>Saldo</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>@item.Telefono</td>
<td>@item.Empresa</td>
<td>@item.Saldo</td>
<td class="detailslink">@Html.ActionLink("Details", "ByProcedureDetailView", "Reports", new { @id = item.Presta }, null)</td>
</tr>
}
</table>
<input id="Submit1" type="submit" value="submit" />
</form>
测试结果如下:
几天来我一直在努力解决这个问题,但一点运气都没有。
我们在数据表的 foreach 循环中有一个“细节”@Html.ActionLink。
然后在“结果”控制器中,我们使用 HTTPGet 和 HTTPPost 操作来填充此数据表。
此处列出了结果控制器代码……。 https://localhost:5003/Outcomes/ByProcedure
[HttpGet]
public IActionResult ByProcedure()
{
…code to get result list
return View(result);
}
[HttpPost]
public IActionResult ByProcedure(IFormCollection form, string submitForm)
{
…after clicking submit button we take form input date pickers for start and end dates and pass in to get list
return View(result);
}
当我单击详细信息时 link 它会转到另一个“报告”控制器和如下所示的操作
<tr>
<td class="detailslink">@Html.ActionLink("Details", "ByProcedureDetailView", "Reports", new { @id = item.ProcTypeID }, null)</td>
</tr>
这是“报告”控制器中的操作结果:https://localhost:5003/reports/ByProcedureDetailView/7
[HttpGet]
public IActionResult ByProcedureDetailView()
{
code to load another datatable…
return View(result);
}
数据表在此页面中填充正常。
但是,如果我们从该页面单击后退按钮,就会出现问题
https://localhost:5003/reports/ByProcedureDetailView/7
到此页面:
https://localhost:5003/Outcomes/ByProcedure
我们收到以下消息,并在单击后退按钮后在 Dev Tools 中看到。
这发生在 Chrome、Safari 和 IE 等

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
我在 Internet 上找遍了,没有找到任何有用的东西。
如有任何帮助,我们将不胜感激。
This is the behavior of the browser.
如果提交页面是购物车结账页面,并且服务器没有进行转载检测,那么用户将被收取两次费用。这是一个非常常见的问题,浏览器必须检测到这一点并警告用户。
通常我们使用PRG pattern来解决这个问题,或者使用TempData
.
可以参考
你的情况可以结合以上两种方法解决。
我创建了一个简单的演示,您可以参考如下:
[HttpGet]
public IActionResult ByProcedure()
{
var result = _context.Cobro.ToList();
var value = TempData["Cobro"];
if (value is string json)
{
result = JsonConvert.DeserializeObject<List<Cobro>>(json);
}
return View(result);
}
[HttpPost]
public IActionResult ByProcedure(IFormCollection form, string submitForm)
{
var result = _context.Cobro.ToList().Where(x => x.Telefono == submitForm).ToList();
TempData["Cobro"] = JsonConvert.SerializeObject(result);
TempData["Name"] = submitForm;
return RedirectToAction(nameof(ByProcedure));
}
查看:
@model IEnumerable<WebApplication_core_mvc.Models.Cobro>
@{
ViewData["Title"] = "ByProcedure";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>ByProcedure</h1>
<form asp-action="ByProcedure">
<input id="Text1" type="text" name="submitForm" value="@TempData["Name"]"/>
<table class="table table-bordered">
<tr>
<th>Telefono</th>
<th>Empresa</th>
<th>Saldo</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>@item.Telefono</td>
<td>@item.Empresa</td>
<td>@item.Saldo</td>
<td class="detailslink">@Html.ActionLink("Details", "ByProcedureDetailView", "Reports", new { @id = item.Presta }, null)</td>
</tr>
}
</table>
<input id="Submit1" type="submit" value="submit" />
</form>
测试结果如下: