Страница обновления кнопки "Назад"

Здесь есть несколько подобных вопросов, но никто не удовлетворяет мои потребности.

У меня есть список элементов на одной странице, давайте назовем его masterlist.aspx. Если я нажму на один из этих элементов списка, появится другая страница, т.е. Details.aspx? Id = something.

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

Проблема заключается в том, что пользователь использует кнопку возврата браузера для возврата на страницу masterlist.aspx, страница не обновляется, она вытащилась из кеша браузера.

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

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

Ответы

Ответ 1

Мне нужно сделать что-то подобное в каталоге, где страница загрузки должна быть загружена из БД при каждой загрузке, потому что, когда вы нажимаете на страницу продукта, она обращается к третьей стороне, чтобы получить обновленную информацию, а затем сохранить ее если он должен быть обновлен. Это происходит, когда вы нажимаете кнопку "Назад", как будто вы говорите, что данные перезагружены. То, что я сделал, добавлено в эту страницу, и, похоже, он отлично работает во всех браузерах.

public class ProductBrowser : Page
{
    protected override void OnInit(EventArgs e)
    {
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetNoStore();
        Response.Cache.SetExpires(DateTime.MinValue);

        base.OnInit(e);
    }
}

Ответ 2

Как захватить событие нажатия кнопки "Назад", а затем вместо того, чтобы разрешить ему использовать браузер .history.back(), вы можете выполнить вызов document.location(...).

Кроме того, вы можете захватить заднее событие и запустить пост-обратно, что может сделать Response.Redirect( "ваша страница" ). Это заставит браузер выдавать инструкцию GET для указанной страницы и обновлять ее

Ответ 3

С Javascript полное решение может быть невозможно, но есть обходное решение.

http://www.boutell.com/newfaq/creating/backbutton.html

Он использует функцию таймаута, которая многократно заставляет браузер выполнять действие "Вперед". Даже если кто-то нажмет кнопку "Назад", он вернется на фактическую страницу, тем самым аннулирует операцию "Назад". Это может вызвать мерцание.

Ответ 4

Я играл с настройками кеша заголовков HTTP, но не могу получить ничего, что работает на всех основных браузерах. В некоторых браузерах я получаю предупреждения на веб-странице с истекшим сроком действия.

Как вы попадаете на эту страницу мастер-листа? Если вы выдаете HTTP GET и, чтобы предотвратить кеширование клиентов и прокси-серверов, у вас не возникло бы проблем с переходом на него (и до сих пор получать обновленную версию).

Это оставляет вас с кешированием на стороне сервера (с правильной недействительностью, когда любой из этих элементов изменяется) или вообще не кэшируется.