点击按钮获取动态复选框值

时间:2011-08-10 14:01:51

标签: c# asp.net dynamic checkbox

我有一个页面,我可以动态创建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);
                }
            }
        }
    }

3 个答案:

答案 0 :(得分:1)

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

在这里阅读asp.net页面生命周期:

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

答案 1 :(得分:1)

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

    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 :(得分:0)

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

因此,当我需要找到Checked值时,我只需遍历该集合,我就可以找到已经检查过的那些。

同样,当它们与动态表格中的数据同时创建时,我能够轻松地将表格数据行与Checkbox值绑定。

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

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