asp.net ページに値を格納するために隠しフィールドを使用しています。基本的に、フォームの値が変更されるたびに非表示フィールドの値を設定します。つまり、名前、日付などです。フィールドは、マスターページを持ち、コンテンツセクションにある Web フォームにあります。
<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>
ここまでは順調ですね。ページが読み込まれると、隠しフィールドの値は「false」になり、Web フォームの値を変更しないと false のままになります。別のコントロールを変更するたびに、javascript 関数が呼び出され、隠しフィールドの値が「true」に更新されます。繰り返しますが、これはすべて問題ありません。
フォームを送信してデータベースを更新した後、コード ビハインドで非表示フィールドの値を「false」に戻します。
hdnDirtyFlag.Value = "false";
しかし、別のボタンをクリックしてポストバックを実行すると、隠しフィールドの値はまだ「true」のままです。
これがなぜなのか説明できる人はいますか?コード ビハインドを確認したところ、値を変更した直後に、値が「false」であることがわかりました。ページに asp:UpdatePanel がありますが、隠しフィールドはこのパネルの一部ではありません。
編集:
これは、最初のポストバックの最後のステップで false に設定された後、2 番目のポストバックでコード ビハインドのフィールドの値を確認するために使用するコードです。上記のように、クライアント側の JavaScript で値が true に設定され、コード ビハインドで false に戻された後、2 回目のポストバックでも何らかの理由で値が true のままです。
if (hdnDirtyFlag.Value == "true")
{
UpdateSecurityObject();
}