如何在Asp.net面板中找到Checkbox?

时间:2011-10-19 16:53:39

标签: c# asp.net .net

我在Panel中找不到复选框。这是我的代码。在页面加载时,我添加了动态控件。它正确加载所有控件:

if(!Page.IsPostBack){
foreach (var chk in chks)
{
   PlSettings.Controls.Add(new LiteralControl("<div class=\"Controls\">"));

   PlSettings.Controls.Add(chk);

   PlSettings.Controls.Add(new LiteralControl("</div>"));
}
}

在按钮更新时,我想遍历面板内的所有控件,如果是checbox的类型,请检查是否已选中。

foreach (var panelctrl in PlSettings.Controls)
            {

                  if (panelctrl.GetType() == typeof(CheckBox))
                   {
                      var checkbox = (CheckBox)chk;

                      if (checkbox.Checked)
                       {
                                userSettings.Add(Convert.ToInt32(checkbox.ID));
                       }
                   }

            }

由于某种原因,Panel只有一个文字控件。并且没有任何控制。

2 个答案:

答案 0 :(得分:2)

使用以下代码更新foreach:

// if(!Page.IsPostBack){
foreach (var chk in chks)
{
   PlSettings.Controls.Add(new LiteralControl("<div class=\"Controls\">"));

   PlSettings.Controls.Add(chk);

   PlSettings.Controls.Add(new LiteralControl("</div>"));
}
//}

您必须在每次回发时添加动态控件。另外,请确保在init或preinit阶段完成此操作。

答案 1 :(得分:0)

尝试这样的事情:

foreach (CheckBox chk in PlSettings.Controls.OfType<CheckBox>())
{
    //code here
}

由于这些控件是动态生成的,因此您需要在每次回发时重新创建控件。确保每次都为控件分配相同的ID,以便ViewState可以重新加载已检查的状态。