我确定这是一个简单的问题,但我想不出一种方法(除了使用javascript强制回发之外)获取后面的asp.net代码中的复选框列表。
每个复选框都在一个单独的自定义控件中,因此我无法使用复选框列表。
任何帮助都会非常感激。
提前致谢
答案 0 :(得分:1)
如果你有一个包含N个复选框的usercontrol,你需要公开一个包含id,控件集合的公共属性......无论你需要从父容器访问它的是什么。
答案 1 :(得分:0)
您可以递归遍历页面上控件的层次结构,只需获取CheckBoxes的控件
在您的页面中,您可以声明一个用于存储复选框的成员:
private List<CheckBox> checkBoxes = new List<CheckBox>();
使用递归方法可以遍历控件结构:
public void TraverseHierarchy(ControlCollection controls)
{
foreach (Control c in controls)
{
CheckBox checkBox = c as CheckBox;
if (checkBox != null)
{
checkBoxes.Add(checkBox);
}
if (c.Controls.Count > 0)
{
TraverseHierarchy(c.Controls);
}
}
}
您可以通过提供Page:
的控件集合来调用它TraverseHierarchy(Page.Controls);
但是上面代码的一个问题是某些控件继承自CheckBox控件。就像RadioButton
一样。因此,as
有效,因此控件也会在您的收藏中匹配。
您可以做的是根据复选框的特定属性进行进一步过滤。例如,如果您的ID
命名在您的复选框中保持一致,您还可以检查ID属性是否以特定前缀开头:
public void TraverseHierarchy(ControlCollection controls)
{
foreach (Control c in controls)
{
CheckBox checkBox = c as CheckBox;
if (checkBox != null)
{
if (checkBox.ID.StartsWith("cb"))
{
checkBoxes.Add(checkBox);
}
}
if (c.Controls.Count > 0)
{
TraverseHierarchy(c.Controls);
}
}
}
或者你可以通过使用is
运算符来消除扩展CheckBox的控件,但这会对性能产生额外的影响并且是一个非常难看的解决方案。