我的任务是创建一个人们可以用来预订晚餐的网站。我们正在使用Visual Basic代码表单。它应该继续运行每种类型的晚餐总数。我无法将运行总计重置为零。我在按钮点击事件之外声明了它们。不知道我哪里出错了。这是代码:
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
结束班
答案 0 :(得分:3)
我在按钮点击事件之外声明了[运行总计]。
每次处理某个活动时,您都会使用新的网页类实例。
明白这一点,这里发生的一切都应该开始对你有意义。您必须将总计保留在各个http请求中持续存在的位置,例如视图状态,会话,应用程序缓存,文件系统或数据库中。类中的变量不会在单个http请求中保留。
答案 1 :(得分:2)
正如Joel所说,当每个HTTP请求创建一个新的类实例时,这些值将不会持久存在。在这种情况下,HiddenField Class很适合你。
首先,删除这些代码行:
Private Chicken_RT As Integer
Private Rib_RT As Integer
Private Veg_RT As Integer
其次,将它放在.aspx标记中(嵌套在Form标记中):
<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)
答案 2 :(得分:1)
好吧,我看到你正在阅读TicketTextBox
,但我没有看到你在任何地方分配它。如果你不指定它,它的值是否总是为零?