Страница обновления кнопки "Назад"
Здесь есть несколько подобных вопросов, но никто не удовлетворяет мои потребности.
У меня есть список элементов на одной странице, давайте назовем его 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 и, чтобы предотвратить кеширование клиентов и прокси-серверов, у вас не возникло бы проблем с переходом на него (и до сих пор получать обновленную версию).
Это оставляет вас с кешированием на стороне сервера (с правильной недействительностью, когда любой из этих элементов изменяется) или вообще не кэшируется.