【问题标题】:Modal popup extender losing ID模态弹出扩展器丢失 ID
【发布时间】:2013-04-02 16:27:25
【问题描述】:

编辑:

添加onload方法:

protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["usersName"] != null)
        {

            object a = Session["_id"];

            IDMaster = Convert.ToInt32(a);

            GridView1.Columns[10].Visible = true;
            GridView1.Columns[11].Visible = true;


        }

我正在使用模态弹出扩展器来警告我的客户特定商品的商品数量超过了一定数量。

我在这个扩展器中有两个按钮,允许用户确认他们是否希望在新库存到货时向他们发送电子邮件。

“是”按钮的触发器工作正常,但是当我将行 ID 发送到用于存储电子邮件详细信息的类的构造函数时,它始终设置为 0,即使变量是全局变量。

这是我进一步解释问题的代码:

在我的模式中添加商品到购物车的按钮:

protected void LinkButton1_Click(object sender, EventArgs e)   
    {


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

        *********Gain the item row ID (this is what needs to be passed*******
        object ID = GridView1.DataKeys[row.RowIndex].Value;

        *********This ID should be passed but is setting to 0************
        rowID = Convert.ToInt32(ID);

        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(qty);
                updatePanel();

            }
            add.close();

        }


        }

以下代码显示了我的确认 onclick 按钮方法。请注意单击添加到购物车按钮时存储在上述方法中的 ID 'rowID'。此 rowID 设置为 0,而不是保存 rowID 值。

 protected void btnOK_Click(object sender, EventArgs e)
    {
       ***** rowID is setting to 0*******
        DBoutOfStockEmail insertNewEmailDetail = new DBoutOfStockEmail(IDMaster, rowID);

        DBMembershipHandler getEmail = new DBMembershipHandler(IDMaster);

        string emailToSend = getEmail.emailOfMember();

        insertNewEmailDetail.insertDetails(emailToSend);

    }

总结这个问题:为什么当我使用模态弹出扩展器单击“是”按钮时,rowID 变量设置为“0”?

【问题讨论】:

  • 这可能来自几个方面..您是在检查还是在进行IsPostBack 检查,您是否将值保存在Session 变量中..? ViewState is it enabled or disabled..? 你能展示一下你的Page_Load Event 的样子吗
  • 还有你为什么不把这行object ID = GridView1.DataKeys[row.RowIndex].Value;改成var ID = GridView1.DataKeys[row.RowIndex].Value;,在你当前的代码`DBHandler`中有很多潜在的Memory Leaks你在哪里Releasing这个对象。 .?
  • 确保LinkButton1 不会导致PostBack 记住Page_Load 每次PostBack 都会被调用
  • @DJ KRAZE 非常感谢您的回答。我只是在会话中保留我的会员 ID。我只是想在按钮点击之间保持行 ID 的值。我什至会将我的页面加载添加到上面的代码中。
  • 您需要检查if(!IsPostBack){}if(IsPostBack){},具体取决于您希望如何填充/检索存储的信息。这样有意义吗?

标签: c# asp.net


【解决方案1】:

根据我最初的评论,我将发布此作为答案

这可能来自几件事..您是否正在检查或进行 IsPostBack 检查,您是否将值保存在会话变量中..? ViewState 是启用还是禁用..?你能展示一下你的 Page_Load 事件是什么样子的吗

【讨论】:

    猜你喜欢
    • 2012-10-22
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2010-10-07
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多