0

私が持っているウェブページプロジェクトのカート機能を書いています。カート ページでは、Cookie 内のカート ID をチェックし、データベース内のすべてのアイテムを取得します。したがって、Cart テーブル内のすべてのアイテムは動的に作成されます。.aspx ページで、空のテーブルが作成されます。コード ビハインドでは、アイテムごとに新しい行とセルが作成されます。

特定のアイテムの数量の更新に問題があります。カート内の各アイテムについて、数量用のテキストボックスとボタンが動的に作成され、数量が更新されます。数量は、ページのロード時にデータベース内の数量に設定されます。たとえば、1から2に変更した後、テキストボックスの値を取得できないようです。

テーブルの作成方法の概要を次に示します。データをテーブルにロードする方法を示すために、大幅に短縮しました。

protected void Page_Load(object sender, EventArgs e){
    cartpopulate(cartID);
}

private void cartpopulate(int cartID){
    //for each item in database where cartID is paramater cartID
    //create a row 
    //get the product name, image, price, quantity, options, and make a cell for each
    //calculate total price from quantity and price
    //add in delete and quantity update buttons

簡単にするために、すべての数量が 1 であると仮定しましょう。したがって、page_load では、すべての数量が 1 に設定されます。 、これは 1 になります。2 などに変更すると、値は既に設定されており、2 は何もしません。データベースの更新部分は機能しますが、2 番目の値「2」を取得するのに問題があります。

これが数量更新コードです...

            if (prod.Quantity == null) { quantitylabel.Value = 1.ToString(); }
            else { quantitylabel.Value = prod.Quantity.ToString() ; }
            quantityinput.ID = "quantity" + i.ToString();
            quantityinput.Width = 20;
            quantityinput.Text = quantitylabel.Value.ToString();
            quantitycell.Controls.Add(quantityinput);
            quantitycell.CssClass="cartitem";
            row.Cells.Add(quantitycell);

            Button btnUpdate = new Button();
            btnUpdate.Text = "Update";
            string arg = quantityinput.Text;
            btnUpdate.CommandName = "update";
            btnUpdate.CommandArgument = arg;
            btnUpdate.Command += (s, e) =>
                {
                    string quanupdate = Convert.ToString(e.CommandArgument);
                    int quanint = Convert.ToInt32(quanupdate);
                    prod.Quantity = quanint;
                    db.SubmitChanges();
                    Response.Redirect("cart.aspx");
                };

いくつかの異なる解決策を見てきましたが、どれもうまくいかないようです。私が疑う 2 つのことは、!IsPostBack で何かを実行するか、ポストバックで動的に作成されたコントロールを再作成することです。私は Web プログラミングを独学で学んでいるので、その方法を 100% 確信しているわけではありませんが、そのうちの 1 つが問題だと思います。

前もって感謝します

4

1 に答える 1

0

静的変数を使用してみてください。つまり、prod.Quantity を静的変数として使用してください。

于 2013-03-27T12:38:10.997 に答える