0

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

结束类

4

3 回答 3

3

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

每次处理事件时,您都在使用页面类的新实例。

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

于 2012-04-10T21:18:32.543 回答
2

正如 Joel 所说,这些值不会持续存在,因为每个 HTTP 请求都会创建一个新的类实例。在这种情况下,HiddenField 类将非常适合您。

首先,删除这些代码行:

    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)
于 2012-04-10T21:42:18.063 回答
1

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

于 2012-04-10T18:05:11.810 回答