Кнопка Назад вызывает обратную передачу текущей страницы. ASP.Net MVC - PullRequest
0 голосов
/ 03 мая 2018

У меня есть контроллер с действием «Подробности» и «Редактировать». Я перехожу к Редактировать , используя View();, после чего отображается страница с частичным просмотром.

В частичном виде есть форма:

@using (Html.BeginForm("CreateOrEdit", "Licenses", FormMethod.Post, new { @class = "pure-form pure-form-aligned", id = "change", onsubmit = "process(this);" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <div class="floatLeft width100per">
        @Html.HiddenFor(model => model.Id)
        @Html.HiddenFor(model => model.CustomerId)

        <button onclick="goBack()" type="button" class="pure-button pure-button-primary newButton">Back</button>
        <input type="submit" value="Save" class="pure-button pure-button-primary newButton marginRight10" onclick="getModules(); setGuid('@Guid.NewGuid()');" />
        <div class="floatLeft pure-form">

Функция goBack ():

function goBack() {
    history.go(-1);
}

Если я перейду к Редактировать и нажму кнопку возврата, все в порядке. Но если я нажму кнопку Сохранить , форма будет отправлена ​​и будет вызвано действие CreateAndEdit - все еще в порядке.

Действие CreateAndEdit использует:

RedirectToAction("Details", new { id = license.Id });

чтобы снова перейти на Подробности .

Затем, если я снова зайду в «Редактировать» и затем нажму Назад - CreateAndEdit действие вызывается снова - не ОК!

Как всегда вернуться на страницу «Подробности», не вызывая CreateAndEdit при нажатии Back .

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вам необходимо отключить кэш для страницы, к которой пользователь не должен возвращаться из-за отправки формы и т. Д.

Вы можете попробовать украсить маршрут с помощью

[OutputCache(NoStore=true, Duration=0)]

Полагаю, [NoCache] также будет украшением вашего действия контроллера.

0 голосов
/ 03 мая 2018

Я думаю, что поведение, которое вы видите, является стандартным поведением браузера. После отправки формы, если вы затем нажмете кнопку «Назад» в браузере (что совпадает с history.go(-1);), форма будет отправлена ​​повторно.

В качестве обходного пути, если страница «CreateOrEdit» доступна только со страницы «Сведения», просто перенаправьте на страницу «Сведения» напрямую, а не просматривайте историю браузера.

function goBack() {
    location.href = '@Html.Raw(Url.Action("Details", "Licenses",  new { id = Model.License.Id }))';
}
...