2014-07-18 23 views
-2

我有一個用戶控件內的窗體,&從頁面調用這個稱爲index.aspx。 提交表單並單擊刷新後,它會再次導致回發。 所以,我試圖在視圖狀態下將數據保存爲'1'並且在初始頁面加載時將其保留爲'0'。頁面刷新導致回傳 - Asp.net

但是,爲什麼視圖狀態通過刷新將其值更改爲0。 如何解決此問題。

MyForm.ascx.cs

protected void Page_Load(object sender, EventArgs e){ 
    if(!IsPostBack){ 
     ViewState["DataSaved"] = 0; 
    } 
} 

protected void btnSubmit_Click(object sender, EventArgs e){ 
    if (Page.IsValid && Convert.ToInt32(ViewState["DataSaved"]) == 0){ 
     //save data; 
     ViewState["DataSaved"] = 1; 
    } else{ 
     ViewState["DataSaved"] = 0; 
    } 
} 
+0

爲什麼要提交表單然後點擊刷新?當然,刷新會重置它所做的一切。 – bowlturner

+0

yup @bowlturner。線索是在名稱:) – Beakie

+1

查找「發佈/重定向/獲取」模式 –

回答

2

在刷新,因爲它最初的頁面還原(您通過GET請求來到這個頁面)。 因此,Viewstate返回到其初始狀態,並且對其進行的所有更改都將丟失。這是正常的行爲。您期望的行爲更像是一個會話,因此您可以嘗試使用會話 - 它將在請求之間保持其狀態。

看看本作頁的生命週期大致的瞭解.NET:

http://msdn.microsoft.com/en-us/library/vstudio/ms178472%28v=vs.100%29.aspx

這對視圖狀態的說明:

http://msdn.microsoft.com/en-us/library/ms972976.aspx

兩個將是對你非常有幫助! 祝你好運。

-2

使用會話而不是ViewState。

+0

他的問題與缺乏對頁面生命週期的理解有關。將值放入Session並不是正確的方法。 – Calvedos

0

爲了簡單起見,ViewState保存在用戶機器內部,而Session保存在服務器機器內部(通過cookie訪問)。 只要頁面爲IsPostBack!IsPostBack ,ViewState將刷新,但會話不會。

在你的情況,我認爲你應該使用會話,而不是ViewState。

要了解更多,你可以通過ASP.NET Life Cycle。從基礎學習總是很好的