选中的复选框不会被识别

时间:2012-06-01 09:51:17

标签: c# asp.net checkbox checkboxlist

我有一个带有可变数量复选框的复选框,我正在做类似的事情:

protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        for (int j = 0; j < CheckBoxList1.Items.Count; j++)
        {
            //LabelTest.Text = "Something"; It works here
            if (CheckBoxList1.Items[j].Selected)
            {
                //LabelTest.Text = "Something 2"; It doesn't work here
                TextBoxTest.Text = CheckBoxList1.Items[j].Text;
                LabelTest.Text = CheckBoxList1.Items[j].Value;
            }
        }
    }

当我选中一个方框时,我的页面上会显示“Something”,但其余的则没有。 我试着像我这样写“if”:

if (!CheckBoxList1.Items[j].Selected)

这样做,当我选中一个方框时,我的TextBoxTest显示“106”,这是我拥有的复选框总数,但不是复选框的数量。

我的CheckBoxList1有一个真正的自动回送。

感谢您的帮助,抱歉我的英语不好。

5 个答案:

答案 0 :(得分:3)

对于复选框,您应使用属性Checked而不是Selected

 if (CheckBoxList1.Items[j].Checked)

但我现在无法测试。

答案 1 :(得分:3)

问题在于您向CheckBoxList添加项目的方式。您在另一个主题中提供了该代码。你应该做的是将该代码包含在其中:

if (!IsPostBack)
{
    ... your code to add items to the CheckBoxList
}

否则,您将在每个回发上重新创建列表,其中Selected属性的默认值为false。

答案 2 :(得分:1)

这应该有用,我已经测试了它

protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
        foreach (ListItem item in CheckBoxList1.Items)
        {
            if (item.Selected == true)
            {
                //Response.Write(item.Value);
                LabelTest.Text = item.Value;
            }
        } 
}

答案 3 :(得分:1)

您在哪里添加复选框列表项?希望那是在页面加载中。

页面加载

private void Page_Load()
{
    if (!IsPostBack)
    {
        // load only fist time 
        LaodCheckBoxList();
    }
}

因为你为checkboxlist启用了autopostback true它会回发并重新创建所有列表项,你将失去选择状态。

答案 4 :(得分:1)

据我所知,您的代码应该可行。 尝试使用foreach

更改for循环
foreach (ListItem itm in CheckBoxList1.Items)
{             
    if (itm.Selected == true)             
    {                 
         TextBoxTest.Text = itm.Text;                 
         LabelTest.Text = itm.Value;             
    }         
}