Обновление страницы кнопки Chrome Back - ASP.net
У меня есть приложение ASP.net (C#).
Когда пользователь находится на определенной странице, он щелкает ссылку на этой странице, которая переводит его на дочернюю страницу, отображая сведения о продукте.
Если пользователь нажимает кнопку возврата браузера, мне нужно обновить родительскую страницу до ее исходного состояния. т. е. все текстовые поля, в которых были введены данные, должны быть пустыми, все скрытые поля сбрасываться и т. д. В основном мне нужен CTRL-F5, когда пользователь нажимает кнопку назад.
Отключение кнопки "назад" не вариант.
Мне это нужно только на определенных страницах.
В IE и Firefox я могу заставить это работать без проблем. Но в Chrome текстовые поля по-прежнему содержат свои значения, как и скрытые поля. Если я нажму CTRL-F5 в Chrome, страница вернется в исходное состояние.
Это код, который я пробовал.
<%@ OutputCache Location="None" VaryByParam="None" %>
и это:
Response.Buffer = true;
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetAllowResponseInBrowserHistory(false);
Response.Cache.SetNoStore();
и это:
Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
Response.Cache.SetValidUntilExpires(false);
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Я также попробовал различные из них в разных комбинациях, но безуспешно.
Спасибо
4 ответа
При нажатии кнопки "Назад" в браузере поля "ВХОД" не сбрасываются браузером автоматически. Вместо этого браузер сохраняет введенные пользователем данные, что облегчает пользователям возврат к исходным данным и внесение изменений в них.
Вы не можете решить эту серверную сторону, потому что браузер обходит кеш для этого. Вместо этого вы можете использовать autocomplete="off"
Атрибут HTML в полях ввода для предотвращения их сохранения браузером.
Вы также можете вручную сбросить форму, используя JavaScript:
document.getElementById("form1").reset();
Эти две строки решили проблему Chrome для меня:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
И я использую эту необязательную строку, чтобы сказать браузеру не создавать запись истории для каждого запроса на той же странице:
Response.Cache.SetAllowResponseInBrowserHistory(true);
Источники:
Решение "грубой силы" заключалось бы в размещении некоторого javascript на странице, который при загрузке страницы устанавливает данные в какое-то известное состояние. Таким образом, он находит все элементы и устанавливает данные на основе массива данных или объекта JSON. По первому запросу, так как в любом случае все по умолчанию, настройка не имеет значения. По запросу кнопки "назад", поскольку JavaScript все еще должен быть запущен, он сбрасывает все значения, независимо от браузера.
Я не верю, что вы можете заставить браузер функционировать так, как вы описали, поскольку каждый браузер должен реализовать кнопку возврата - Chrome просто делает это по-своему.
Вы также можете поместить autocomplete="off" в тег формы вместо каждого поля ввода.