【问题标题】:get dynamic checkbox value on button click在按钮单击时获取动态复选框值
【发布时间】:2011-10-24 03:11:03
【问题描述】:

我有一个页面,我在其中动态创建 2 个复选框。

 TableRow tr = new TableRow();
                    for (int i = 0; i < 2; i++)
                    {
                        TableCell Tc = new TableCell();


                            Tc.Attributes["style"] = "line-height: 30px; text-align: left";
                            Tc.Attributes["width"] = "50%";
                            Tc.Style.Add("padding-left", "5px");
                            //Checkboxes on left along with labels
                            CheckBox checkBoxCtrl = new CheckBox();
                            checkBoxCtrl.ID = "checkBoxCtrl" + i;
                            Tc.Controls.Add(checkBoxCtrl); 
                            tr.Cells.Add(Tc);                           
                    }

一旦它们在页面加载事件中创建,我就会有一个 Ok_button 点击​​事件,它需要检查复选框是否被选中。

 protected void Update2_Click(object sender, EventArgs e)
        {


         if(checkBoxCtrl.checked)
          //here i wont be able to get the value 
          // i get the error the name checkBoxCtrl does not exist..
          {
             response.write("true");
           }

        }

但是在这种情况下我该如何进行检查。

谢谢

答案:

这是获取复选框值需要做的事情

 protected void Update1_Click(object sender, EventArgs e)
    {
        for(int i = 0; i < ControlPropList.Count; i++)
        {              
            CheckBox chkTest = (CheckBox)xxx.FindControl("checkBoxCtrl" + i);
            {
                if (chkTest.Checked)
                {
                    Global.logger.Info("Checkbox True = " + chkTest.ID);
                }
                else
                {
                    Global.logger.Info("Checkbox False = " + chkTest.ID);
                }
            }
        }
    }

【问题讨论】:

  • 您需要在 Session 中为该用户保存复选框,并在每次页面加载时添加复选框,并确保保留对它们的代码隐藏引用。它也可以用 javascript 来完成,所以它在客户端上执行,如果你想要的话。

标签: c# asp.net dynamic checkbox


【解决方案1】:

只要您在 Page_PreInit 方法中将复选框添加到页面,这应该可以正常工作。如果在此之后添加它们(例如 Page_Load),它们的值将不会被保留。

在此处了解 asp.net 页面生命周期:

http://msdn.microsoft.com/en-us/library/ms178472.aspx

【讨论】:

  • 我知道这行得通它会创建一个复选框.. 但是在创建页面后假设我选中复选框并单击确定按钮我如何检查是否找到具有动态复选框 ID 的复选框并获取它的价值?
  • 你现在的做法就是这样。我要说的是,虽然您仍然会看到复选框并且如果您在 Page_Load 上创建它时能够单击它,但除非您将其添加到 Page_PreInit 中的页面,否则您将无法正确检查它的值。
  • 我需要在 page_init 和 page_load 中创建还是只有 page_init 可以?如果页面加载发生/.. 谢谢
【解决方案2】:

考虑将动态复选框存储在本地成员中:

    private CheckBox _myCustomCheckbox = new CheckBox();

    protected override void OnInit(EventArgs e)
    {
        TableRow tr = new TableRow();
        for (int i = 0; i < 2; i++)
        {
            TableCell Tc = new TableCell();

            if (i == 0)
            {
                Tc.Attributes["style"] = "line-height: 30px; text-align: left";
                Tc.Attributes["width"] = "50%";
                Tc.Style.Add("padding-left", "5px");
                //Checkboxes on left along with labels

                _myCustomCheckbox.ID = "checkBoxCtrl" + j;
                Tc.Controls.Add(_myCustomCheckbox);
                tr.Cells.Add(Tc);
            }
        }

        // the row needs added to a page control so that the child control states can be loaded 
        SomeTableOnThePage.Controls.Add(tr);

        base.OnInit(e);
    }

    protected void Update2_Click(object sender, EventArgs e)
    {
        if(_myCustomCheckbox.Checked)
        {
            response.write("true");
        }
    }

【讨论】:

  • 谢谢,太好了..如果有多个复选框,我该如何检查..??
  • 请你看看我的编辑,因为我将有 2 个带有 id 的 checkBoxCtrl0 和 checkBoxCtrl1 的复选框,我需要检查它们...如果我解决了这个问题,我很高兴
【解决方案3】:

可能不是你想要的,但我有一个类似的问题,我在 ASP.NET 页面中有一个动态生成的表,在一列中动态生成了 CheckBox。我从一个集合中为表创建了数据,然后在创建动态 CB 时,我给它们一个 ID 并将它们存储在第二个集合中,例如 CB 的数组。

因此,当我需要查找 Checked 值时,我只需遍历集合,就可以找到被 Checked 的值。

由于它们是与动态表中的数据同时创建的,因此我能够轻松地将表数据行与复选框值关联起来。

这显然假设动态表和 CB 是使用某种循环创建的。

这可能不是最好的解决方案,但可以满足我当前的需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 2013-08-24
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    相关资源
    最近更新 更多