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”。

这是数量更新代码...

            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");
                };

我查看了一些不同的解决方案,但似乎没有一个有效。我怀疑的两件事是问题将在 !IsPostBack 上做某事,或者在回发时重新创建动态创建的控件。我在网络编程方面是自学成才的,所以我不是 100% 确定如何做到这一点,但我认为其中之一就是问题所在。

提前致谢

4

1 回答 1

0

尝试使用静态变量,即使用 prod.Quantity 作为静态变量

于 2013-03-27T12:38:10.997 回答