2012-04-10 17 views
0

Ich habe eine Aufgabe, eine Website zu erstellen, die Leute verwenden können, um Reservierungen zu machen. Wir verwenden Visual Basic-Code für die Formulare. Es soll Summen für jede Art von Abendessen laufen. Ich habe Probleme, die laufenden Summen nicht auf Null zurückzusetzen. Ich habe sie außerhalb des Button-Click-Ereignisses deklariert. Nicht sicher, wo ich falsch gelaufen bin. Hier ist der Code:Kann Summen nicht laufen lassen - ASP.NET/VB

Option Strict On 


Partial Class _Default 
Inherits System.Web.UI.Page 

Private Chicken_RT As Integer 
Private Rib_RT As Integer 
Private Veg_RT As Integer 

Protected Sub SubmitButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles SubmitButton.Click 
    'Variables 
    Dim DinnerPrice As Integer 
    Dim RadioSelect As Boolean = True 
    Dim Tickets As Integer 
    Dim DinnerType As String 

    'Parsing 
    Tickets = Integer.Parse(TicketTextBox.Text) 

    'Validation/Calculations 
    If TicketRangeValidator.IsValid And TicketValidator.IsValid Then 
     If ChickenRadio.Checked = True Then 
      DinnerPrice = Tickets * 15 
      Chicken_RT += Tickets 
      DinnerType = "Chicken" 
     ElseIf RibRadio.Checked = True Then 
      DinnerPrice = Tickets * 20 
      Rib_RT += Tickets 
      DinnerType = "Rib" 
     ElseIf VegetarianRadio.Checked = True Then 
      DinnerPrice = Tickets * 12 
      Veg_RT += Tickets 
      DinnerType = "Vegetarian" 
     Else 
      RadioErrorLabel.Text = ("Please select a dinner type") 
      RadioSelect = False 
     End If 

     'Display results 
     If RadioSelect = True Then 
      If OpenBarCheckBox.Checked = True Then 
       DinnerPrice += Tickets * 15 
       OpenBarLabel.Text = "Yes" 
      Else 
       OpenBarLabel.Text = "No" 
      End If 

      NumberDinnersLabel.Text = Tickets.ToString() 
      DinnerTypeLabel.Text = DinnerType 
      TotalCostLabel.Text = DinnerPrice.ToString("C") 
      TotalChickenLabel.Text = Chicken_RT.ToString() 
      TotalRibLabel.Text = Rib_RT.ToString() 
      TotalVegetarianLabel.Text = Veg_RT.ToString() 

     End If 
    End If 

End Sub 

End Class

Antwort

2

Wie Joel sagte, werden die Werte nicht beibehalten, da jede HTTP-Anforderung eine neue Instanz Ihrer Klasse erstellt. Die HiddenField Class würde Ihnen in dieser Situation gut stehen.

Zuerst diese Zeilen Code entfernen:

Private Chicken_RT As Integer 
    Private Rib_RT As Integer 
    Private Veg_RT As Integer 

Zweitens setzen diese in Ihrer ASPX Markup (in Form Tag verschachtelt):

<asp:HiddenField id="Chicken_RT" runat="server" value="0"/> 
    <asp:HiddenField id="Rib_RT" runat="server" value="0"/> 
    <asp:HiddenField id="Veg_RT" runat="server" value="0"/> 

Schließlich

Veg_RT += Tickets 

wird:

Veg_RT.Value = (CInt(Veg_RT.Value) + Tickets).ToString() 

(Wiederholen Sie für alle Ihre laufenden Summen.)

Um Ihre Summen zugreifen würden Sie tun:

Dim intVegTotal As Integer = CInt(Veg_RT.Value) 
+0

Danke, das hat sehr geholfen. Ich habe diese Klasse ausgewählt, nachdem ich meinen Wirtschaftskurs gekündigt hatte, so dass ich die ersten drei Klassen verpasste. – Shane

1

Nun, ich sehe Sie lesen TicketTextBox, aber ich sehe nicht, dass Sie es, wo jeder zuweisen. Wenn Sie es nicht zuweisen, wird es nicht immer Null sein?

+0

ich es auf die Variable 'Tickets' zuweisen. – Shane

+0

Korrekt, aber Sie weisen Ihren Ticket-Wert niemals der TicketTextBox zu. Also, jedes Mal, wenn Sie auf den Button klicken, wird Tickets von 0 berechnet. – Sam

3

Ich habe [die laufenden Summen] außerhalb der Schaltfläche Click-Ereignis deklariert.

Jedes Mal, wenn Sie ein Ereignis behandeln, arbeiten Sie mit einer neuen Instanz Ihrer Seitenklasse.

Verstehen Sie, und alles, was hier passiert, sollte anfangen, für Sie Sinn zu machen. Sie müssen Ihre Gesamtsummen an einem Ort aufbewahren, der für einzelne HTTP-Anforderungen wie z. B. viewstate, die Sitzung, den Anwendungscache, das Dateisystem oder eine Datenbank bestehen bleibt. Variablen in Ihrer Klasse werden nicht für einzelne HTTP-Anforderungen beibehalten.

Verwandte Themen