私が持っているウェブページプロジェクトのカート機能を書いています。カート ページでは、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 つが問題だと思います。
前もって感謝します