2012-04-10 9 views
0

人々が夕食の予約をするために使用できるWebサイトを作成する課題があります。フォームに対して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 

エンドクラス

答えて

2

Joelが言っていたように、各HTTP要求があなたのクラスの新しいインスタンスを作成するので、値は維持されません。 HiddenField Classはこの状況でうまくいきます。 、

Private Chicken_RT As Integer 
    Private Rib_RT As Integer 
    Private Veg_RT As Integer 

セカンド(FORMタグ内にネスト)あなたの.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

ありがとう、それは助けになりました。私は経済学級を落とした後、このクラスを選んだので、最初の3つのクラスは逃しました。 – Shane

1

まあ、私はあなたがTicketTextBoxを読んでいる見るが、私はあなたがそれ任意の場所に割り当てる表示されません。あなたがそれを割り当てなければ、値は常にゼロではありませんか?

+0

私は変数 'Tickets'に代入しています。 – Shane

+0

正しいですが、チケットの値をTicketTextBoxに戻すことは決してありません。だから、あなたがボタンをクリックするたびに、チケットは0から計算されています。 – Sam

3

ボタンのクリックイベントの外で[実行中の合計]が宣言されています。

イベントを処理するたびに、ページクラスの新しいインスタンスで作業しています。

これを理解すると、ここで起こっていることはすべてあなたに合ったものになるはずです。ビューステート、セッション、アプリケーションキャッシュ、ファイルシステム、またはデータベースなど、個々のHTTP要求にまたがって存続する場所に合計を保持する必要があります。あなたのクラス内の変数は個々のHTTP要求を超えて持続しません。

関連する問題