【问题标题】:How to check if at least one checkbox is checked?如何检查是否至少选中了一个复选框?
【发布时间】:2015-09-27 04:33:12
【问题描述】:

只有在每个复选框列表中至少选中一个复选框时,我才尝试将我的数据绑定到 gridview 中。但是,它似乎不起作用,因为当我单击提交时没有选中复选框,它仍然进入绑定语句并且没有在标签中显示文本消息。

我的代码哪里出错了?请帮忙

if (IsPostBack)
{
   if (CheckBoxList1.SelectedValue != null && CheckBoxList2.SelectedValue != null)
   {
      Bind();
   }
   else if (CheckBoxList1.SelectedValue == String.Empty)
   {
      LABEL1.Text = ("Please select at least one checkbox();
   }
   else if (CheckBoxList2.SelectedValue == String.Empty)
   {
      LABEL2.Text = ("Please select at least one checkbox").ToString();
   }

【问题讨论】:

标签: c# asp.net checkboxlist


【解决方案1】:

使用 linq Any

if (IsPostBack)
{
    bool seleceted1 = CheckBoxList1.Items.Cast<ListItem>().Any(li => li.Selected);
    bool seleceted2 = CheckBoxList2.Items.Cast<ListItem>().Any(li => li.Selected);

    if (selected1 && selected2)
    {
       Bind();
    }
    else if (!selected1)
    {
       LABEL1.Text = ("Please select at least one checkbox();
    }
    else if (!selected2)
    {
       LABEL2.Text = ("Please select at least one checkbox").ToString();
    }

如果您想要至少一个检查项,请使用|| 运算符。从哪个列表中无关紧要。

if (selected1 || selected2) // true if at least 1 item is checked
{
    Bind();
}

【讨论】:

  • 您可以使用之前的方法和ANY。这将对将来会看到此答案的其他用户有所帮助..
  • 任何是什么意思?它确实可以工作,因为即使没有检查任何内容,它仍然会进入绑定语句
  • 这里 Any 将检查 ckeckboxlist 中的所有项目,如果选择了其中任何一个,将返回 true。 @newtoasp
  • 用调试器检查。似乎还存在另一个问题。如果您找到它并且无法修复它,您可能必须提出一个新问题。 @newtoasp
【解决方案2】:

If(IsPostback) 我认为是罪魁祸首。如果您的页面已通过按钮 (PostBack) 刷新,则您的复选框列表将 Bind()。因此,每次您单击页面中任意位置的按钮时,您的列表都会刷新,从而删除您选择的框。

尝试把If(IsPostBack)改成If(!IsPostBack)

编辑:

哦,知道了,您的 .SelectedValue 是一个字符串,因此它永远不会为空。

改变这个

if(CheckBoxList1.SelectedValue != null && CheckBoxList2.SelectedValue != null)

到这里

if(CheckBoxList1.SelectedValue != String.Empty && CheckBoxList2.SelectedValue != String.Empty)

并将If(!IsPostBack) 恢复为If(IsPostBack),因为该代码事件似乎在button_click 或其他东西下,而不是我假设为PageLoad 的东西。

如有疑虑,请联系。谢谢

【讨论】:

  • 是的,我正在尝试检查复选框是否在提交时被选中,所以我确实需要放入 ispostback
  • 请在页面加载和绑定中显示您的代码,那里似乎有问题。
  • 知道了,CheckBoxList1.SelectedValue 是一个字符串。请看我的编辑
【解决方案3】:

复选框值不会为空,因此您只需检查值是否为空,如下所示:

if (!string.IsNullOrEmpty( CheckBoxList1.SelectedValue)  && !string.IsNullOrEmpty( CheckBoxList2.SelectedValue))
               {
                  Bind();
               }
    else 
    {
    if (string.IsNullOrEmpty( CheckBoxList1.SelectedValue))
       {
          LABEL1.Text = ("Please select at least one checkbox();
       }
       else if (string.IsNullOrEmpty( CheckBoxList2.SelectedValue))
       {
          LABEL2.Text = ("Please select at least one checkbox").ToString();
       }
    }

【讨论】:

  • 嗨,即使我取消选中所有复选框列表 1,仍然会进入绑定语句。请咨询
  • 您似乎在 CheckBoxList1 中选择了值,您可以调试代码或尝试:Response.Write(CheckBoxList1.SelectedValue); 只是为了确保在 checkboxlist1 中没有选择值?
  • 如果两个 checkboxlist 值之一为空,则不会执行 bind(),但我认为还有另一个代码可以进行绑定,尝试在 else 语句中隐藏网格,像这样:GridView1.Visible = false;
【解决方案4】:

您可以使用 Count 属性来确定是否从 ComboBoxList 中选择了任何项目。 Count 将返回选中的项目数,如果您没有标记任何选择,则此属性将返回 0。

if (IsPostBack)
{
   if (CheckBoxList1.Items.Cast<ListItem>().Count(li => li.Selected) != 0 && 
       CheckBoxList2.Items.Cast<ListItem>().Count(i => i.Selected) != 0)
   {
      Bind();
   }
   else if (!CheckBoxList1.Checked)
   {
      LABEL1.Text = ("Please select at least one checkbox();
   }
   else if (!CheckBoxList2.Checked)
   {
      LABEL2.Text = ("Please select at least one checkbox").ToString();
   }
}

【讨论】:

  • CheckBoxList 没有 Checked 属性。
  • 你还需要做一个.Cast&lt;ListItem&gt;,因为CheckBox.Items是一个ListItemCollection,它实现了IEnumerable而不是IEnumerable&lt;ListItem&gt;
【解决方案5】:

简单的一个

    for (int i = 0; i < RadioButtonList1.Items.Count - 1; i++)
    {
        if (RadioButtonList1.Items[i].Selected==true)
        {
            //Bind here
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2013-02-21
    相关资源
    最近更新 更多