2010-08-20 42 views
0

我有一個頁面內decalred類級的價格變量,就像這樣:ASP.NET的Web網頁提交

public partial class _Default : System.Web.UI.Page 
{ 
    private MyClass myVar = new MyClass(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      myVar.LoadData(); 
      myVar.ShowData(); 
     } 
    } 

    protected void cmdRefresh_Click(object sender, EventArgs e) 
    { 
     myVar.ShowData(); 
    } 
} 

我的問題是,在初始加載後,第一次按下按鈕它似乎重置myVar,並且它的所有數據都丟失了。這是ASP.NET的一個已知問題,是否有解決方法?

回答

4

使用ViewState來存儲該類,如果您只需要保存當前頁面的類。如果你想爲整個網站保存它,然後看看諸如Sessions之類的東西。

private MyClass myClass 
{ 
    get { 
     if (this.ViewState["myVar"] != null) 
     { 
      return (MyClass)this.ViewState["myVar"]; 
     } 
    } 
set{ 
    this.ViewState["myVar"] = value; 
} 
} 
+0

該死!對我來說太快了! – 5arx 2010-08-20 12:08:59

2

變量myVar永遠不會在回傳中持久化,您需要使用某種緩存方法,例如Application/Session/ViewState/Cookies。

0

是的,這是一個知道的功能。基本上你的頁面對象是爲每個請求創建的,因此爲你設置屬性(IsPostBack就是其中之一),但是你需要採取自己的步驟來確保每次填充字段(在代碼中聲明)。在這種特殊情況下,通過獲取它們或者將它們保持在窗體(視圖狀態)或會話數據中。選擇哪一個應取決於數據大小,重新提取時間,數據存儲負載等。