1

我有一个简单的复选框列表,我正在使用一条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每次循环时,inside语句都会评估为 false。它确实正确计算了列表中的 10 个项目。我被这么简单的事情难住了。有人可以帮我确定可能导致 if 语句返回 false 的原因吗?

4

4 回答 4

1

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

于 2013-05-17T20:53:00.510 回答
0

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

象素

    <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;

    }

我能够制作以下内容。这当然是在点击按钮之后。

输出

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

于 2013-05-17T21:20:38.067 回答
0

确保在页面加载中绑定复选框列表时已设置此检查 if (!Page.IsPostBack) { ...bind your data }

这应该可以解决问题

于 2015-08-28T03:58:53.673 回答
-2

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

于 2013-05-17T20:24:28.127 回答