Обновление страницы кнопки 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" в тег формы вместо каждого поля ввода.

Другие вопросы по тегам