2012-04-10 3 views
0

У меня есть задание создать веб-сайт, который люди могут использовать для резервирования ужина. Мы используем код Visual Basic для форм. Предполагается, что он будет вести общий итог каждого типа обеда. У меня возникли проблемы с получением текущих итогов, которые не будут сброшены до нуля. Я объявляю их вне события нажатия кнопки. Не знаю, где я ошибся. Вот код:Не удается сохранить текущие итоги - 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

ответ

2

Как сказал Джоэл, значения не будут сохраняться, поскольку каждый HTTP-запрос создает новый экземпляр вашего класса. В этой ситуации вам понравится HiddenField Class.

Во-первых, удалить эти строки кода:

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

Во-вторых, это в вашем .aspx разметки (вложен в форме тега):

<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"/> 

Наконец,

Veg_RT += Tickets 

Ставок:

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

(Повторите эту процедуру для всех ваших запущенных итогов.)

Чтобы получить доступ к итоги вы могли бы сделать:

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

Спасибо, это очень помогло. Я выбрал этот класс после отказа от моего экономического класса, поэтому я пропустил первые три класса. – Shane

1

Ну, я вижу, вы читаете TicketTextBox, но я не вижу, что вы назначая его где-либо. Если вы не назначили его, будет ли оно всегда равным нулю?

+0

Я присваиваем его переменной 'Tickets'. – Shane

+0

Правильно, но вы никогда не назначаете свое значение Билетов обратно TicketTextBox. Поэтому каждый раз, когда вы нажимаете кнопку, Билеты рассчитываются от 0. – Sam

3

У меня есть [итоговые итоги], объявленные вне события нажатия кнопки.

Каждый раз, когда вы обрабатываете событие, вы работаете с новым экземпляром вашего класса страниц.

Поймите это, и все, что здесь происходит, должно начать иметь для вас смысл. Вы должны хранить свои итоговые данные в месте, которое сохраняется в отдельных HTTP-запросах, таких как просмотр, сеанс, кэш приложений, в файловой системе или в базе данных. Переменные в вашем классе не сохраняются в отдельных HTTP-запросах.