无法保持运行总计 - ASP.NET/VB

问题描述:

我有一个任务是创建一个网站,人们可以用来做晚餐预订。我们为表单使用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 

末级

正如Joel所说,值不会随着每个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 2012-04-11 02:41:54

好了,我看你正在阅读TicketTextBox,但我没有看到你赋予它的任何地方。如果你不分配它,它的值是不是总是为零?

+0

我把它分配给变量'Tickets'。 – Shane 2012-04-10 18:21:13

+0

正确,但您永远不会将您的门票值重新分配给TicketTextBox。所以每次点击按钮时,门票的计算都是从0开始的。 – Sam 2012-04-10 19:49:17

我有[运行总数]声明在按钮单击事件之外。

每当你处理一个事件时,你正在使用一个新的页面类的实例。

明白,这里发生的一切都应该开始对你有意义。您必须将总计保持在一个能够保持个别http请求的地方,例如视图状态,会话,应用程序缓存,文件系统或数据库中。类中的变量不会持续存在于各个http请求中。