【发布时间】:2011-02-14 14:35:46
【问题描述】:
我正在使用隐藏字段将值存储在 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();
}
【问题讨论】:
-
当您在浏览器中查看回发后加载的页面源时,隐藏字段的值是否仍然为“真”?按照您上面所说的方式,您在第二次回发后看到“真实”,但不要说在您在页面上执行任何操作之前是否检查它实际上仍然是“真实”。
-
嗨@patmortech 在源中,当页面最初加载和回发后,该值都是 false。在后面的代码中将该字段的值设置为“false”后,下次回帖时会看到“true”。
-
您在使用 Firebug 吗?如果是这样,请在您的 SetHiddenVariable 函数中放置一个断点。检查它是否在你不期望的时候被调用。
-
不使用 IE8 的 Firebug。我向 SetHiddenVariable 添加了一个 alert('blah') ,它仅在我期望它时被调用,即在使用 'onchange' 事件更改控件中的值之后。当 VS javascript 代码中有断点时,Firebug 会中断吗?
-
Firebug 不关心你的 javascript 来自哪里——你只需要在它的脚本选项卡中找到你的方法并设置一个断点。
标签: javascript asp.net hidden-field