我在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只有一个文字控件。并且没有任何控制。
答案 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可以重新加载已检查的状态。