0

私には、人々が夕食の予約をするために使用できるWebサイトを作成する任務があります。フォームにはVisualBasicコードを使用しています。それは、各タイプの夕食の合計を継続することになっています。現在の合計がゼロにリセットされないようにするのに問題があります。ボタンクリックイベントの外で宣言してもらいます。どこが間違っていたのかわからない。コードは次のとおりです。

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 マークアップ (フォーム タグにネスト) に入れます。

    <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 に答える