复选框列表将所有复选标记评估为false

时间:2013-05-17 20:19:48

标签: c# asp.net

我有一个简单的复选框列表,我使用for语句将所选值检索到一个字符串中。这必须很简单,但是当它评估是否被选中时,一切都返回false。

ASP代码

<asp:CheckBoxList runat="server" ID="ckblInterests" ClientIDMode="Static" RepeatColumns="2" />

ASP.NET代码:

string interests = "";

for (int i = 0; i < ckblInterests.Items.Count; i++)
{
    if (ckblInterests.Items[i].Selected)
        {
            interests += ckblInterests.Items[i].Value + ", ";
        }
    }
}

每次循环时,内部if语句的计算结果为false。它确实正确计算了列表中的10个项目。我很难接受这么简单的事情。有人可以帮我识别可能导致if语句返回false的原因吗?

4 个答案:

答案 0 :(得分:1)

您有代码在页面加载(或其他一些事件)上动态地将复选框添加到列表中。这导致在每次回发时清除并重新添加这些复选框的状态。您的页面加载应该在该部分周围有一个if(!page.ispostback),这样您就不会清除内容。

答案 1 :(得分:0)

使用以下代码(主要是您的代码)

<强> .aspx的

    <div>
        <asp:CheckBoxList runat="server" ID="ckblInterests" ClientIDMode="Static" RepeatColumns="2">
            <asp:ListItem>Awesome</asp:ListItem>
            <asp:ListItem>Tasty</asp:ListItem>
            <asp:ListItem>Terrible</asp:ListItem>
        </asp:CheckBoxList>
    </div>
    <asp:Button runat="server" ID="test" OnClick="test_Click" />
    <asp:Label runat="server" ID="label"></asp:Label>

<强> c#中

    protected void test_Click(object sender, EventArgs e)
    {

        string interests = "";

        for (int i = 0; i < ckblInterests.Items.Count; i++)
        {
            if (ckblInterests.Items[i].Selected)
            {
                interests += ckblInterests.Items[i].Value + ", ";
            }
        }

        this.label.Text = interests;

    }

我能够产生以下内容。这当然是在点击按钮后。

Output

您是否绑定了未提及的数据源?

答案 2 :(得分:0)

确保在页面加载中绑定checkboxlist时你设置了这个检查是否(!Page.IsPostBack){...绑定你的数据}

这应该可以解决问题

答案 3 :(得分:-2)

我认为您需要检查CHECKED属性,而不是SELECTED。