2012-04-01 7 views
-1

Mögliche Duplizieren: Button click event doesn't work properlySchrittmaßnummer pro Button klicken C# ASP.NET

Ich versuche, einen int zu erhöhen, für die jeweils auf einer Seite Standard klicken. Int=0. Es geht nur bis zu 1. Was soll ich tun, um die Anzahl für jeden Klick zu erhöhen?

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

Ein unfaßbarer Beweis für die zustandslose Natur des Webs – Steve

+0

Scheint das gleiche Problem wie hier beschrieben http://stackoverflow.com/questions/9968298/visual-studios-c-sharp-class-re-called-on -page-refresh – TGH

Antwort

1

Sie müssen das Ergebnis auf eine Weise speichern, die über das Postback bestehen bleibt. Ich schlage vor, mit Viewstate, zum Beispiel:

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

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

Ich denke, es ist besser für die Geschwindigkeit von 0 –

2

Sie könnten den ViewState verwenden Sie den Wert über Postbacks zu halten:

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

Weil jedes Mal, wenn Sie auf die Schaltfläche klicken, wird der Wert der Geschwindigkeit der Initialisierung zu 0.

HTTP ist zustandslos. Das bedeutet, dass die Variablenwerte in Ihrem Postback nicht beibehalten werden, wie dies bei der Programmierung in Windows Forms der Fall ist. Sie müssen also den Wert über Ihre Postbacks halten.

Sie können ein verstecktes Element in Ihrer Seite verwenden, um den Wert zu speichern und dem Wert zugreifen jedes Mal, wenn Sie eine Funktion auf, das zu tun:

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

und in Ihrer Seite zu laden, können Sie den Wert lesen und lade es auf deine Variable.

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

Von Adrianftode's Kommentar, die Daten für die Steuerelemente wie TextBox, Kästchen zum Ankreuzen, Radio-Button-Steuerelemente Werte werden auf den Server, auf dem Postbacks gebucht werden, weil sie als Standard-HTML-Formular-Steuerelemente im Browser gerendert werden. Siehe Chapter 4. Working with ASP.NET Server Controls.

+0

starten Der Wert einer Eingabe muss nicht durch Viewstate gepflegt werden. Warum sollte es sein, wenn es jedes Mal hin und her geht? –

+0

@AdrianIftode: Da hTTP ist zustandslos. Der Wert im typischen Eingabefeld ist beim Postback nicht verfügbar. Alle ASP.NET-Steuerelemente verwendet ViewState intern, um die Werte während des Postbacks zu behalten – Shyju

+0

Ich bin sicher, dass diese Anweisung für Eingaben nicht gültig ist, ich erklärte warum –