2012-04-01 23 views
-1

可能重複: Button click event doesn't work properly增量數單擊C#ASP.NET

我試圖增加一個int爲每次點擊默認頁上。 Int=0。它只會上升到1.我應該怎麼做才能增加每次點擊的數量?

public partial class _Default : System.Web.UI.Page 
{ 
    private int speed = 0; 

    public int Speed 
    { 
     get { return speed; } // Getter 
     set { speed = value; } // Setter 
    } 

    public void accelerate() 
    { 
     //speed++; 
     this.Speed = this.Speed + 1; 
    } 

    public void decelerate() 
    { 
     // speed--; 
     this.Speed = this.Speed - 1; 
    } 

    public int showspeed() 
    { 
     return this.Speed; 
    } 

    //car bmw = new car(); 
    public void Page_Load(object sender, EventArgs e) 
    { 
     //datatype objectname = new 

     dashboard.Text = Convert.ToString(this.showspeed()); 
    } 

    public void acc_Click(object sender, EventArgs e) 
    { 
     this.accelerate(); 
     dashboard.Text = Convert.ToString(this.showspeed()); 
    } 

    public void dec_Click(object sender, EventArgs e) 
    { 
     this.decelerate(); 
     this.showspeed(); 
    } 
} 
+3

網絡的無狀態性的不可否認的證明 – Steve 2012-04-01 21:27:53

+0

似乎是這裏所述的同樣的問題http://stackoverflow.com/questions/9968298/visual-studios-c-sharp-class-re-called-on - 頁面刷新 – TGH 2012-04-01 21:29:12

回答

1

您需要以一種將在回發中保留的方式存儲結果。我建議使用ViewState的,例如:

public int Speed 
{ 
    get { 
     if(ViewState["Speed"] == null) { 
      ViewState["Speed"] = 1; 
     } 
     return Convert.ToInt32(ViewState["Speed"]); 
    } 

    set { 
     ViewState["Speed"] = value; 
    } 
} 
+1

我認爲速度更好從0開始 – 2012-04-01 21:37:34

2

您可以使用ViewState保持整個回傳值:

private int Speed 
{ 
    get 
    { 
     if (ViewState["Speed"] == null) 
      ViewState["Speed"] = 0; 
     return (int)ViewState["Speed"]; 
    } 
    set { ViewState["Speed"] = value; } 
} 
1

因爲當你點擊按鈕每次,它被初始化速度值爲0.

HTTP是無狀態的。這意味着它不會像在Windows Forms編程中那樣在回發中保留變量的值。所以你需要保留回傳的價值。

您可以使用一個隱藏的元素在你的頁面來存儲值,每次訪問的價值,你想要做的一個函數:

<asp:HiddenField ID="hdnFileId" runat="server" Value="" /> 

,並在你的頁面加載,你可以閱讀的價值並將其加載到您的變量。

public void Page_Load(object sender, EventArgs e) 
{ 
    this.speed = ConvertTo.Int32(hdnFileId.Value); 
} 

Adrianftode's評論,因爲它們呈現在瀏覽器標準的HTML表單控件像文本框,複選框,單選按鈕控件值的控件的數據將被髮送到服務器上的回發。見Chapter 4. Working with ASP.NET Server Controls

+0

輸入的值不需要通過視圖狀態來維護。爲什麼要每次都來回傳遞? – 2012-04-01 21:36:09

+0

@AdrianIftode:由於hTTP是無狀態的。回傳時,典型輸入字段中的值不可用。所有ASP.NET控件都在內部使用ViewState來保留回發期間的值 – Shyju 2012-04-01 21:39:09

+0

我確信這個語句對輸入無效,我解釋了爲什麼 – 2012-04-01 21:40:14