使用动态创建的文本框更新数据库

时间:2013-03-24 22:50:10

标签: c# asp.net linq dynamic textbox

我正在为我的网页项目编写购物车功能。在购物车页面上,它会检查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,或者在回发时重新创建动态创建的控件。我在网络编程方面自学成才,所以我不是百分之百确定如何做到这一点,但我认为其中一个就是问题。

提前致谢

1 个答案:

答案 0 :(得分:0)

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