我正在使用隐藏字段将值存储在 asp.net 页面中。基本上,每当表单上的值发生更改时,我都会设置隐藏字段的值,即名字、日期等。该字段位于具有母版页且位于内容部分的网络表单上:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<asp:HiddenField ID="hdnDirtyFlag" runat="server" Value='false' />
每当 web 表单上的其他控件中触发 onchange 事件时,我通过调用函数来更改 javascript 中字段的值:
<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>
到现在为止还挺好。当页面加载隐藏字段值是“假”,如果我不更改网络表单上的任何值,它仍然是假的。每当我更改另一个控件时,都会调用 javascript 函数并将隐藏字段值更新为“true”。这一切都很好。
提交表单并更新数据库后,我在后面的代码中将隐藏字段值设置回“false”:
hdnDirtyFlag.Value = "false";
但是当我单击另一个按钮并进行回发时,隐藏字段值仍为“真”。
谁能解释这是为什么?我单步执行了后面的代码,在更改值后立即可以看到该值为“假”。页面上有一个 asp:UpdatePanel,但隐藏字段不是该面板的一部分。
编辑:
这是我在第一次回发的最后一步中将其设置为 false 之后,在第二次回发中检查代码后面字段的值的代码。由于某种原因,该值在第二次回发中保持为 true,在客户端的 javascript 中将其设置为 true,然后在后面的代码中将其设置回 false,如上所示:
if (hdnDirtyFlag.Value == "true")
{
UpdateSecurityObject();
}