Как справиться с отправкой формы ASP.NET MVC Кнопка «Назад»? - PullRequest
5 голосов
/ 13 апреля 2010

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

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

и если пользователь просто снова нажмет на кнопку "Отправить", я получу некоторые странные ошибки.

Итак, с точки зрения asp.net mvc, как лучше всего обращаться с пользователями, которые нажимают кнопку "Назад"?

спасибо!

Ответы [ 3 ]

8 голосов
/ 21 июня 2015

Это решение отлично работает как для всего контроллера, так и для конкретного действия, просто добавьте [NoCache]

 /// <summary>
 /// Prevent a controller or specific action from being cached in the web browser.
 /// For example - sign in, go to a secure page, sign out, click the back button.
 /// <seealso cref="https://stackoverflow.com/questions/6656476/mvc-back-button-issue/6656539#6656539"/>
 /// </summary>
public class NoCacheAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var response = filterContext.HttpContext.Response;
        response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        response.Cache.SetValidUntilExpires(false);
        response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        response.Cache.SetCacheability(HttpCacheability.NoCache);
        response.Cache.SetNoStore();
    }
}

А в вашем коде:

[NoCache]
[Authorize]
public class AccountController : Controller
{ ... }

Первоначально опубликовано здесь: MVC Кнопка возврата вопроса

1 голос
/ 13 апреля 2010

Что вы подразумеваете под "потенциальными странными ошибками"? Я сомневаюсь, что пользователь щелкнет кнопку «Отправить» еще раз, если он не захочет опубликовать точно то же самое снова. Если вам не нужны повторяющиеся записи, проверьте содержимое в вашей БД перед публикацией.

Если вы действительно не хотите, чтобы люди публиковали одну и ту же форму дважды, добавьте случайно сгенерированное число (просто убедитесь, что оно достаточно случайное, чтобы избежать коллизий, или используйте что-то вроде комбинации идентификатора пользователя и точная метка времени) в скрытое поле, сохраните его вместе со своими данными и убедитесь, что его нет в вашей БД, прежде чем что-либо сохранять.

0 голосов
/ 15 января 2019

Используйте этот код

@using (Html.BeginForm("FindResults", "COntrollerName", FormMethod.Get, new { id = "SearchForm" }))
{}
public ActionResult Index()
    {
return view();
}
[HttpGet]
    public ActionResult FindResults(FindIssueModel model)
    {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...