2014-10-02 48 views
1

當我運行下面的代碼時,它不會多次更新變量_counter。無論按下按鈕多少次,打印值始終爲「1」。如何每次更新btnOK都在按下?Updatepress on buttonpress

public partial class test2 : System.Web.UI.Page 
{ 
    protected int _counter; 
    public test2() 
    { 
     _counter = 0; 
    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Session["cnt"] = 0; 
    } 
    protected void btnOK_Click(object sender, EventArgs e) 
    { 
     _counter = (int)Session["cnt"]; 
     _counter++; 
     Session["cnt"] = _counter; 
     lblInfo.Text = _counter.ToString(); 
    } 
} 

回答

3

這就是爲什麼需要在ASP.NET狀態管理的一個經典情況/場景。

是無狀態的,因爲它運行在協議,它本身不保留任何狀態,所以你按一個新的HTTP-POST請求將產生一個按鈕,每一次 - >您_counter被初始化爲0 - >被遞增到1並相應顯示。

考慮使用任何狀態管理機制來解決此問題。您可以使用Session避免這種像

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!Page.IsPostBack) 
     Session["cnt"] = 0; 
    else 
     DoIncrement(); 
} 

protected void DoIncrement() 
{ 
    if(Session["cnt"] != null) 
    { 
     int _counter = (int)Session["cnt"]; 
     _counter++; 
     Session["cnt"] = _counter; 
     lblInfo.Text = _counter.ToString();  
    } 
} 
+1

'會話[「計數器」]'可以完成此,甚至'QueryString'。會話確實會使用內存。 – 2014-10-02 19:08:07

+0

Omg,你太對了!我無法相信爲什麼我不能意識到這一點!我現在不用如何在c#中實現這個。我已經更新了我的問題,包括你的代碼(並在Page_Load中聲明),但我沒有得到它的工作。你能快速看一下嗎? – Dave 2014-10-02 19:24:23

+0

這個答案中的代碼將工作。刪除外部_counter聲明並使用此確切代碼。順便說一句,這個會話也會轉到其他任何頁面。 – 2014-10-02 19:25:12