我使用隱藏的字段來存儲在asp.net頁面中的值。基本上我設置隱藏字段的值每當窗體上的一個值被改變,即第一名稱,日期等領域是在具有一個主頁,並且在所述內容部分中的網頁表單: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'。這一切都很好。
我提交表單,並更新數據庫後,我在後面的代碼中設置隱藏字段的值返回爲「假」:
hdnDirtyFlag.Value = "false";
但是當我點擊另一個按鈕,做回傳,隱藏字段值仍然是'真'。
任何人都可以解釋爲什麼這是?我在代碼後面跳過代碼,並在更改值後立即看到值爲'false'。在頁面上有一個asp:UpdatePanel,但隱藏的字段不是此面板的一部分。
編輯:
這是我使用的代碼來檢查該字段的值暫列第二回傳後,它已在第一回發的最後一步被設置爲false的代碼。值保持爲真由於某種原因在第二回發,經過如上所示已被設定爲true在JavaScript在客戶端然後重新設置爲假在後面的代碼:
if (hdnDirtyFlag.Value == "true")
{
UpdateSecurityObject();
}
當您在瀏覽器中查看瀏覽器頁面的源代碼並在回發後加載時,隱藏字段的值是否仍爲「真」?上述措辭的方式,您在第二次回發後會看到「真實」,但不要說在頁面上執行任何操作之前是否檢查確實仍然是「真實」的。 – patmortech 2011-02-14 14:51:40
嗨@patmortech在源代碼中,當頁面最初加載和回傳之後,這個值都是false。在代碼後面將該字段的值設置爲'false'後,我在下次回發時看到'true'。 – 2011-02-14 15:12:46
你使用的是Firebug嗎?如果是這樣,請在您的SetHiddenVariable函數中放置一個斷點。當你不期望它時,檢查它是否被調用。 – patmortech 2011-02-14 15:23:16