Я использую скрытое поле для хранения значения на странице asp.net. В основном я устанавливаю значение скрытого поля всякий раз, когда изменяется значение формы, то есть имя, дата и т.д. Поле находится на веб-форме, которая имеет главную страницу и находится в разделе содержимого:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<asp:HiddenField ID="hdnDirtyFlag" runat="server" Value='false' />
Я изменяю значение поля в javascript, вызывая функцию всякий раз, когда событие onchange запускается в других элементах управления в веб-форме:
<asp:TextBox CssClass="niceInput" ID="tbFirstName" runat="server" MaxLength="40" Width="150" onchange='SetHiddenVariable();'></asp:TextBox>
<script type="text/javascript">
function SetHiddenVariable() {
// Set the value of the hidden variable so we know a field has been updated
var hiddenControl = '<%= hdnDirtyFlag.ClientID %>';
document.getElementById(hiddenControl).value = 'true';
}
</script>
Пока все хорошо. Когда страница загружает значение скрытого поля, это "false" , и если я не изменю никаких значений в веб-форме, он останется ложным. Всякий раз, когда я меняю другой элемент управления, функция javascript вызывается, а значение скрытого поля обновляется до "true". Опять все в порядке.
После того, как я отправлю форму и обновил базу данных, я вернул значение скрытого поля в значение "false" в коде:
hdnDirtyFlag.Value = "false";
Но когда я нажимаю другую кнопку и делаю обратную передачу, значение скрытого поля по-прежнему остается "true".
Может кто-нибудь объяснить, почему это? Я прошел через код позади и сразу же после изменения значения, я вижу, что значение "false" . На странице есть asp: UpdatePanel, но скрытое поле не является частью этой панели.
EDIT:
Это код, который я использую для проверки значения поля в коде, находящегося во второй обратной передаче, после того, как на последнем шаге первой обратной передачи было установлено значение false. Значение по-прежнему остается истинным по второму возврату после того, как в javascript на стороне клиента было установлено значение true, а затем вернулось к false в коде, как показано выше:
if (hdnDirtyFlag.Value == "true")
{
UpdateSecurityObject();
}