Firefox кэширует скрытые данные, даже если автозаполнение отключено

У меня есть форма с атрибутом autocomplete, установленным на off.

Внутри этой формы есть скрытый элемент ввода (сгенерированный с использованием метода Html.HiddenFor() ASP.NET MVC, но это не имеет значения):

<input type="hidden" value="0" name="Status" id="Status" data-val-required="The Status field is required." data-val-number="The field Status must be a number." data-val="true">

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

Однако это скрытое поле ввода всегда кэшируется. Он никогда не получает правильное значение. Я попытался установить атрибут autocomplete непосредственно для элемента ввода, но безуспешно.

Как я могу получить это скрытое поле, чтобы получить правильное значение? Я бы предпочел не использовать какой-либо Javascript.

Изменить: добавление дополнительного кода...

Контроллер

//This code is being executed, and the status is being incremented.
shippingOrder.Status = (shippingOrder.Status != (int)OrderStatus.Closed) ? shippingOrder.Status + 1 : shippingOrder.Status;

Вид

@using (Html.BeginForm("Number", "Order", FormMethod.Post, new { id = "orderSummary", autocomplete = "off" })) {
    ...
    @Html.HiddenFor(m => m.Status)
}

person Justin Helgerson    schedule 08.05.2012    source источник
comment
Как насчет того, чтобы опубликовать действия вашего контроллера, особенно ту часть, где он увеличивается, и, возможно, представления?   -  person Aaron Daniels    schedule 09.05.2012
comment
@AaronDaniels - я не хотел делать вопрос слишком специфичным для моего сценария, но я добавил несколько примеров кода. Я проверил это и с другими свойствами, такими как строка. Я пытался жестко закодировать значение в контроллере, и скрытый ввод по-прежнему не обновляется, но если я запишу значение в ответ HTML, я увижу значение, которое я хочу. Модель получает правильное значение.   -  person Justin Helgerson    schedule 09.05.2012


Ответы (1)


Согласно этому сообщению здесь помощники html, такие как HiddenFor, всегда будут сначала используйте опубликованное значение, а затем значение в модели.

Как вы сказали, при записи значения на страницу вы можете видеть, что оно увеличивается, но помощник использует ранее опубликованное значение, что является предполагаемым поведением.

Ссылка предлагает использовать ModelState.Remove("Status") или ModelState.Clear() перед назначением нового значения.

Это также предполагает, что другим вариантом может быть не использование помощника HiddenFor, а вместо этого создание скрытого поля самостоятельно. Подобно этому:

<input type="hidden" name="Status" value="@Model.Status" />

В любом случае похоже, что ваша проблема основана на аналогичных обстоятельствах.

person Nope    schedule 08.05.2012
comment
Спасибо за вашу помощь. Я бы предпочел не задавать имена свойств в жестком коде со строками, поэтому я собираюсь использовать метод Clear() для решения этой проблемы. - person Justin Helgerson; 09.05.2012