Сделать страницу, чтобы браузер не кешировал / сохранял входные значения

Большинство браузеров кешируют входные значения формы. Поэтому, когда пользователь обновляет страницу, входные данные имеют одинаковые значения.

Вот моя проблема. Когда пользователь нажимает Сохранить, сервер проверяет отправленные POST-данные (например, проверенные продукты) и, если они недопустимы, отправляет их обратно в браузер. Однако, как указано выше, даже если сервер отменяет выбор для некоторых значений, они все равно могут быть выбраны из-за кеша браузера!

В моих данных есть невидимые (пока не выбран родительский элемент) флажки, поэтому пользователь может даже не знать, что какое-то предыдущее значение все еще выбрано, до тех пор, пока не нажмете Сохранить снова и не получит сообщение об ошибке - даже если пользователь думает это не. Что раздражает.

Это можно решить, нажав Ctrl + F5, но это даже не решение. Есть ли автоматический / программный способ указать браузеру не кэшировать входные данные формы на какой-либо форме / странице?


person queen3    schedule 23.04.2010    source источник
comment
<form autocomplete="off"... вариант для вас? Эта проблема возникает во всех браузерах или только в одном?   -  person David Kolar    schedule 23.04.2010
comment
Есть ли способ ответить на этот вопрос с помощью выпадающих <select> списков. У меня есть список, и я определил selected выбор, но при обновлении страницы сохраняются предыдущие выбранные параметры.   -  person Martin    schedule 01.04.2016
comment
Я хочу добиться противоположного - сохранить вводимые значения каждой страницы на кнопке «Назад» (дважды щелкните «Назад», чтобы получить ввод соответственно). Существуют различные примеры использования большого количества JS-кода (который на самом деле не работает, IMHO), но - есть ли более простой способ? Я пробовал autocomplete = on как в форме, так и в полях ввода - не работает. Браузер - Chrome.   -  person Dmitry z    schedule 02.07.2020


Ответы (5)


Вы явно устанавливаете значения как пустые? Например:

<input type="text" name="textfield" value="">

Это должно помешать браузерам помещать данные туда, где они не должны. В качестве альтернативы вы можете добавить атрибут autocomplete к тегу формы:

<form autocomplete="off" ...></form>
person DisgruntledGoat    schedule 23.04.2010
comment
Я говорю о флажках, поэтому не могу установить значение. И означает ли отключение автозаполнения не сохранять входные значения формы, когда пользователь нажимает F5, а не только для раскрывающегося списка автозаполнения? - person queen3; 23.04.2010
comment
Согласно developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion, autcompletion = off влияет на cession history cession по крайней мере, в Гекконе. Я проверю, работает ли это для того, что мне нужно. - person queen3; 23.04.2010
comment
@ queen3: Да, флажки - это проблема, потому что нет возможности явно сказать, что не отмечен. Если у вас все еще есть проблемы, вы можете попробовать checked="false", это может работать в некоторых браузерах. Другой альтернативой является использование Javascript / jQuery для явного снятия всех флажков при загрузке страницы. - person DisgruntledGoat; 28.04.2010
comment
@ queen3, вы имеете в виду autocomplete = off, а не autocompletion = off - person Matt Baker; 12.07.2012
comment
Все ответы и предложения не помогли мне. Использование хрома и развитие .net - person hakan; 08.06.2014
comment
@piedpiper Попробуйте ModelState.Clear () в действии вашего контроллера. Если вы используете return View (... или return PartialView (... тогда он вернет старые значения. Это сделано специально для MVC. - person thenninger; 02.05.2017
comment
... добавление autocomplete = off в качестве аргумента поля ввода помогло мне - person 6opko; 11.04.2021

Из справки по переполнению стека

Это не сработало со значением = "", если браузер уже сохраняет значение, поэтому вам следует добавить.

Для тега ввода есть атрибут autocomplete, который вы можете установить:

<input type="text" autocomplete="off" />

Вы также можете использовать автозаполнение для формы.

person shareef    schedule 19.06.2013
comment
В Chrome кажется, что autocomplete="off" не действует при использовании для отдельных элементов формы - даже если атрибут value явно установлен пустым, и при отправке заголовка Cache-Control: Must-Revalidate это не имело никакого эффекта. Мне пришлось применить атрибут autocomplete="off" к самому элементу <form>, чтобы подавить такое поведение в Chrome. - person mindplay.dk; 18.07.2013
comment
Я сделал autocomplete = off в форме, но у меня это не сработало - person Kingsley Simon; 09.05.2016
comment
Мне нужна дополнительная информация @KingsleySimon, например, браузер, и у вас могут быть некоторые настройки в вашем браузере, которые мешают правильному поведению - person shareef; 09.05.2016
comment
похоже, что поведение браузера изменилось: developer.mozilla.org/ en-US / docs / Web / Security / - person david; 24.08.2016
comment
и обратите внимание на действительную HTML-форму. и, например, это не форма внутри другого и т. д. - person shareef; 25.08.2016

Другой подход - сбросить форму с помощью JavaScript сразу после формы в HTML:

<form id="myForm">
  <input type="text" value="" name="myTextInput" />
</form>

<script type="text/javascript">
  document.getElementById("myForm").reset();
</script>
person pmko    schedule 08.12.2011

По сути, есть два способа очистить кеш:

<form autocomplete="off"></form>

or

$('#Textfiledid').attr('autocomplete', 'off');
person Anand Dwivedi    schedule 25.07.2015

Это сработало для меня в новых браузерах:

autocomplete="new-password"
person erikrunia    schedule 24.07.2017