【问题标题】:how to determine checkboxlist is checked/selected -如何确定复选框列表被选中/选中 -
【发布时间】:2011-05-25 19:00:34
【问题描述】:

当我执行代码时,我得到了 4 个复选框,并且我选中/选中了所有 4 个复选框,当我尝试调试代码时,它确实算作我有 4 个复选框,但所有 4 个复选框都被选中=false。

我在代码中缺少什么?

<asp:checkboxlist id="chk" runat="server" ondatabinding="chk_DataBinding"
   ondatabound="chk_DataBound">
</asp:checkboxlist>

List<String> roles = new List<string>();

 for (int i = 0; i < chk.Items.Count; i++)
 {
     if (chk.Items[i].Selected)
    {
        roles.Add(chk.Items[i].Value);
    }
 }

【问题讨论】:

  • 不清楚应该删除所有元素吗?你甚至进入了那个 for 循环吗?
  • 我更新了我的问题,是的,它进入了循环,但它说我没有选中任何复选框(实际上我已经选中了所有复选框)
  • 我很困惑。您正在遍历复选框列表项,如果选择了一个项目,您正在将该值添加回复选框列表?
  • 我没有添加到复选框列表中,请查看我的问题。
  • 你继续编辑它并更改你的代码。

标签: c# asp.net


【解决方案1】:

您的逻辑与ListControl.Items 页面上给出的基本CheckBoxList 一致,根据个人经验,检查ListItem.Selected 属性应该可以正常工作。

在你点击“如果检查”逻辑之前检查以确保你没有重新填充CheckBoxList - 如果我不得不猜测,我会说你很有可能会丢失每个列表回发。简单的解决方案是,如果是回发,则不要调用您的数据绑定逻辑。

【讨论】:

  • 我在数据绑定上放置了一个断点,它只在页面加载时才会发生,并且在我点击按钮(回发)后它不会进入数据绑定事件。
  • 您是否有可能也在后面的代码中添加或删除事件处理程序,或者还有其他一些逻辑可以在没有数据绑定的情况下删除和添加复选框?除此之外,如果您查看Page.PreLoad 中的CheckBoxListPage.Load 的开头,您是否看到任何选中的ListItems
  • 谢谢你的回答,我忘了 IsPostBack!
【解决方案2】:
public string[] CheckboxListSelections(System.Web.UI.WebControls.CheckBoxList list)
{
 ArrayList values = new ArrayList();
 for(int counter = 0; counter < list.Items.Count; counter++)
 {
  if(list.Items[counter].Selected)
  {
   values.Add(list.Items[counter].Value);
  }    
 }
 return (String[]) values.ToArray( typeof( string ) );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 2011-12-22
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多