. Net Основная страница не кэшируется и получает страницу с ошибкой «ERR_CACHE_MISS» при нажатии кнопки браузера «Назад» - PullRequest
0 голосов
/ 21 июня 2020

Я пытался понять это уже несколько дней, и мне совсем не повезло.

У нас есть «детали» @ Html .ActionLink в foreach l oop в Datatable.

Затем в контроллере Outcomes у нас есть действия HTTPGet и HTTPPost для заполнения этой таблицы данных.

Код контроллера Outcomes, указанный здесь…. 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);
}

Когда я нажимаю ссылку «Подробности», происходит переход к другому контроллеру «Отчеты» и действию, показанному ниже

<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

Мы получаем сообщение ниже и видим его в инструментах разработчика после нажатия кнопки «Назад».

Это происходит в Chrome, Safari и IE et c.

введите описание изображения здесь

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

Я просмотрел все rnet и не нашел ничего полезного.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 22 июня 2020

Это поведение браузера.

Если страница отправки является страницей оформления заказа корзины покупок, а обнаружение репоста не было на сервере, то с пользователя будет взиматься плата дважды . Это очень распространенная проблема, и браузер должен обнаружить это и предупредить пользователя.

Обычно мы используем шаблон PRG для решения этой проблемы или TempData.

Вы можете обратиться к this .

В вашем случае вы можете объединить два вышеуказанных метода, чтобы решить эту проблему.

Я создал простую демонстрацию, на которую вы можете ссылаться как показано ниже:

    [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>

Вот результат теста: введите описание изображения здесь

...