无法保持运行总计 - 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)
答
我有[运行总数]声明在按钮单击事件之外。
每当你处理一个事件时,你正在使用一个新的页面类的实例。
明白,这里发生的一切都应该开始对你有意义。您必须将总计保持在一个能够保持个别http请求的地方,例如视图状态,会话,应用程序缓存,文件系统或数据库中。类中的变量不会持续存在于各个http请求中。
谢谢,这对我有很大的帮助。我放弃经济课后选择了这门课,所以我错过了前三门课。 – Shane 2012-04-11 02:41:54