繁体   English   中英

奇怪的ASP.net标签和回发问题

[英]Strange ASP.net label and postback issue

就目前所见,我将尽可能准确,准确地描述此错误,这似乎是随机的。

为了提供一些背景信息,我正在一家网上商店,用户单击“添加”按钮以从我的gridview的模板字段中将商品添加到他们的购物车中。 这将获取他们想要购买的物品,并将其插入到购物车数据库表中,然后在单击“购物车”图标以显示其内容时,通过网格视图显示此表。

现在,当用户单击该项目时,将进行检查以确保该项目尚未在购物篮中。 如果在其中,则将其更新为新的数量;如果不在,则将其插入购物车数据库,同时还更新标签以显示物品的数量。 除了我有一个令人沮丧的错误,即单击该项目时有时按钮根本不会添加或更新购物车或标签总数,所有这些工作正常。 这似乎最经常发生在第一个网格项目上。

我已经逐步调试通过,似乎一切正常,正在从gridrow等获得正确的ID。 我想知道这是否是某种回发问题

在站点主站点onload方法中设置购物车内容的代码load方法:

     protected void Page_Load(object sender, EventArgs e)
    {

        if (Session["usersName"] != null)
        {
            object a = Session["_id"];
            IDMaster = Convert.ToInt32(a);

            UserWelcome.Text = "Welcome back " + Session["usersName"].ToString();
            cartButton.Visible = true;
            Label1.Visible = true;
            Label2.Visible = true;
            memberLogin.Visible = false;
            LblOr.Visible = false;
            lblPlease.Visible = false;
            memberLogin.Visible = false;
            memberReg.Visible = false;

        }

        else
        {
            cartButton.Visible = false;
            Label1.Visible = false;
            Label2.Visible = false;
            UserWelcome.Visible = false;
            memberLogin.Visible = true;
            memberLogout.Visible = false;
            LblOr.Visible = true;
            lblPlease.Visible = true;
            memberLogin.Visible = true;
            memberReg.Visible = true;

            MenuItem foo = NavigationMenu.FindItem("My Orders"); // your particular item
            NavigationMenu.Items.Remove(foo);

        }

        setCart();

    }

    private void setCart()
    {

        int cartItems;
        string cartNos;

        SqlConnection sqlcon = new SqlConnection(connString);
        SqlCommand sqlcmd = new SqlCommand("SELECT * FROM contents WHERE memberID = " + IDMaster + "", sqlcon);
        SqlDataAdapter adp = new SqlDataAdapter(sqlcmd);
        DataSet ds = new DataSet();
        adp.Fill(ds);


        if (ds.Tables[0].Rows.Count > 0)
        {
            cartItems = ds.Tables[0].Rows.Count;
            cartNos = cartItems.ToString();
            Label1.Text = cartNos;
        }


        else
        {

            int noItems = 0;
            string convertEmptyItems;

            convertEmptyItems = noItems.ToString();
            Label1.Text = convertEmptyItems;
        }

    }

用于根据商品是否存在来添加或更新购物车的代码:

        GridViewRow row = ((Button)sender).Parent.Parent as GridViewRow;
        TextBox t = (TextBox)row.FindControl("txtQuan");

        object ID = GridView1.DataKeys[row.RowIndex].Value;

        rowID = Convert.ToInt32(ID);

        ViewState["ID"] = rowID;

        string qty = t.Text;

        int stockToAdd = Convert.ToInt32(qty);

        DBHandler add = new DBHandler(rowID);

        int qtyCheck = add.getStockQty();

        if (stockToAdd > qtyCheck)
        {

            Button2_ModalPopupExtender.Show();

        }

        else{


            SqlConnection con;
            con = add.openDB();

            con.Open();

            DBHandler idCheck = new DBHandler(rowID);
            int rows = idCheck.checkCartRows();

            if (rows > 0)
            {
               int qtyNow = idCheck.getCartQty();

                int updateStock = qtyNow + stockToAdd;

                idCheck.updateQty(rowID, updateStock);
                updatePanel();

            }

            else
            {

                idCheck.insertCart(IDMaster, qty);
                updatePanel();

            }
            add.close();

            DBHandler updateCart = new DBHandler(IDMaster);

            int newRows = updateCart.checkCartRowsAfterUpdate();

            string numberOfRows = newRows.ToString();

            ((Label)this.Master.FindControl("Label1")).Text = numberOfRows;

        }


        }

抱歉,这个问题含糊不清,但我确实可以确定! 希望有人会看到我做错了。

好的,对此进行了排序。 原来是我错过了。 基本上,当我显示我的购物车内容时,我正在为所有会员购物车显示它。 这让我感到困惑,因为它正在添加项目。 我的“购物车”将仅显示通过会话变量登录的特定成员的内容。 当我的购物车检查是否已添加商品时,它正在查看为所有成员添加的所有商品,因此,当然,如果另一个成员已经在购物车中添加了该商品,则永远不会添加它,这很简单将要对其进行更新,并为其他成员添加该标签,因此该标签将不会更新。 一旦删除购物车中的物品,我就可以添加它。 因此,基本上我现在已经修复了代码,以便每个项目都具有添加它的成员的相应ID,并且可以正常工作。

此处的关键规则是检查代码的所有进程以查找缺少的愚蠢事物。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM