2011-08-04 11 views
1

Ie.私は次のように、自分のページ上のコードの一部を持っているのPage_LoadでASP.NETセッションショッピングカートアイテム更新でアイテムの問題が発生しない

Dim subTotal As Integer = 0 
    For Each item As CartItem In ShoppingCart.Instance.Items 
     subTotal += 1 
    Next 

    strShoppingCart.Append(subTotal).Append(" Items") 
    shoppingCartItems.Text = strShoppingCart.ToString() 

であるとサブUpdate_Click(オブジェクトとしてByVal送信者、ByValをeとして保護さ

を次のように私はその後、私のカートにアイテムを追加することができますEventArgs)を整数= productListTable.Rows.Count

For Each row As GridViewRow In productListTable.Rows 
     If row.RowType = DataControlRowType.DataRow Then 
      ' We'll use a try catch block in case something other than a number is typed in. If so, we'll just ignore it. 
      Try 
       ' Get the productId from the GridView's datakeys 
       Dim productId = Convert.ToInt32(productListTable.DataKeys(row.RowIndex).Value) 
       ' Find the quantity TextBox and retrieve the value 
       Dim quantity = Integer.Parse(CType(row.Cells(1).FindControl("txtQuantity"), TextBox).Text) 
       'Dim price = Decimal.Parse(CType(row.Cells(1).FindControl("TradePriceField"), Label).Text) 
       Dim price = Decimal.Parse("16.00") 
       Dim productName = CType(row.Cells(1).FindControl("ProductNameField"), Label).Text 
       Dim packSize = Integer.Parse(CType(row.Cells(1).FindControl("PackSizeField"), Label).Text) 
       Dim stockIndicator = Integer.Parse(CType(row.Cells(1).FindControl("PackSizeField"), Label).Text) 
       ShoppingCart.Instance.AddItem(productId, quantity, price, productName, packSize, stockIndicator) 


      Catch ex As FormatException 

      End Try 
     End If 
    Next 
End Sub 

として薄暗いrowscount

ページ読み込みを次のように問題がありますのアイテムは、セッション で1つの項目は私が正しいセッションカウントから読み取ることができますどのように1

にカウンターが行くページを更新し、実際にあった場合に0

私はページがまだ0アイテムを言う製品を追加しているカウント?

答えて

2

Page_Loadは、Update_Clickより前に発生する予定です。そのため、最初のフォーム送信後にカウントの増加が見られないのはなぜですか。 Update_Clickの実行後にshoppingCartItemsコントロールを更新するか、ページを表示するためにResponse.Redirectに戻るかのいずれかを行う必要があります。私は個人的には投稿後にResponse.Redirectを使いたいと思っています。なぜなら、ユーザーがページを更新すると、データを再投稿するというブラウザメッセージが表示されないからです。

また、ASP.NET Page Life Cycleをチェックアウトすることもできます。

+0

ご質問すべてのクリックに対して、レスポンスが非常に重いリソースか、間違っているようですか?また、update_clickの後にShoppingCartItemsを更新するには、どうすればいいのでしょうか?つまり、ShoppingCart.Instance.AddItem(productId、quantity、price、productName、packSize、stockIndicator) – StevieB

+0

Page_rereenderのセッション数を表示するコードを配置しています。トリックをした – StevieB

+0

@StevieB:私はリダイレクトのアプローチがリソース重いとは思わない。再ポストダイアログは混乱しているので(ページの更新やバックボタン、フォワードボタンのクリックなどのいくつかの状況で表示できます)、ユーザーエクスペリエンスを向上させる必要があると私は考えています。 ASP.NETの標準的なアプローチは、Page_Loadにデータをバインドし、ポストバック(if(!Page.IsPostBack)DataBindMyControls();)の場合に考慮します。任意のポストバックイベント(ボタンクリックなど)は、更新が必要なものを更新し、Response.Redirectだけでページをリロードすることができます。 – rsbarro

0

ショッピングカートでも同様の問題がありましたが、AJAXのアップデートパネルを使用していましたが、リダイレクトはAJAXの仕組みでは機能しませんでした。

商品がショッピングカートに追加された後、mycartlistview.DataBind()をマイコードに使用しました。

関連する問題