2

我很难弄清楚这一点。如果我在用户控件中有一个复选框列表,我如何循环(或检查,真的)列表中检查了哪些框?

正如我在下面的评论中所说,我想通过控件本身的属性公开选中的项目。

4

2 回答 2

3

从你的页面你可以做

var checkboxes = (CheckBoxList)userControl1.FindControl("checkBoxList1");

但在我看来,更好的解决方案是通过属性或方法公开检查的项目。

在用户控制中

public string[] CheckedItems {
    get {
        List<string> checkedItems = new List<string>();
        foreach (ListItem item in checkbox1.Items)
            checkedItems.Add(item.Value);

        return checkedItems.ToArray();
    }
}

然后在页面

var checkedItems = userControl1.CheckedItems; 

您也可以只返回checkbox1.Items属性,但这不是很好的封装。

于 2009-10-28T19:50:39.350 回答
1

如果您使用的是 .net 3.5,则可以创建一个只读属性,该属性使用 LINQ 返回仅包含选定值的 IList:

  public IList<string> SelectedItems{
       get {
          return checkbox1.Items.Cast<ListItem>.Where(i => i.Selected).Select(j => j.Value).ToList();
       }

    }
于 2009-10-28T20:13:06.373 回答