Обновить страницу при нажатии «Назад» — MVC 4

Что может быть простым способом заставить мой ActionResult всегда срабатывать, когда я попадаю на эту страницу? Например, при обратном щелчке браузера это не будет выполнено.

public ActionResult Index()
{
    //do something always

    return View();
}

person aw04    schedule 18.03.2014    source источник


Ответы (3)


Отключение кеша на ActionResult заставляет страницу обновляться каждый раз, а не отображать кешированную версию.

[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)]
public ActionResult Index()
{
    //do something always

    return View();
}

Теперь, когда вы нажимаете кнопку «Назад» в браузере, это происходит каждый раз.

person aw04    schedule 18.03.2014
comment
как насчет использования VaryByParam = "None", как упоминалось здесь< /а> это нормально? - person Shaiju T; 28.10.2015

Вы можете попробовать событие onunload и ajax:

<script>
   window.onunload = function () {
      $.ajax({
         url: '/ControllerName/Index',
         type: 'POST',
         datatype: "json",
         contentType: "application/json; charset=utf-8"
      });
   };
</script>
person Dumisani    schedule 18.03.2014
comment
Я думал о чем-то подобном, но не был уверен, что стоит попытаться перенаправить onunload. Что-нибудь, о чем я должен беспокоиться, или это приемлемая вещь, которая работает в кросс-браузере? Кроме того, как я узнаю, что пользователь пытался вернуться назад? Я не хочу всегда перенаправлять на эту страницу. - person aw04; 18.03.2014
comment
Единственное, о чем вам следует беспокоиться, это то, что ваше действие будет вызвано нажатием кнопки «Назад» в браузере и нажатием кнопки «Обновить». Даже когда вы делаете постбэк на своей странице. Однажды я столкнулся с этой проблемой, и это единственный способ, которым я мог ее решить. stackoverflow.com/q/21400594/2174170 - person Dumisani; 18.03.2014
comment
Спасибо, ссылка на ваш вопрос оказалась полезной. Я думаю, что мне не нужно использовать такой радикальный подход в моем случае. Я могу обойтись чем-то в готовом событии моего индекса, а не при выходе на следующую страницу (просто пока не знаю, что это такое). Я бы предпочел не трогать поведение обратного щелчка по умолчанию, если мне это не нужно :) - person aw04; 18.03.2014

Добавление этого кода в мой HTML отлично работает для меня:

<input id="alwaysFetch" type="hidden" />
<script>
    setTimeout(function () {
        var el = document.getElementById('alwaysFetch');
        el.value = el.value ? location.reload() : true;
    }, 0);
</script>

Это может пригодиться тем, кто предпочитает не иметь дело с кодом на стороне сервера, а не с общепринятым решением.

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

person Ziad    schedule 03.06.2014