我有一个简单的复选框列表,我使用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的原因吗?
答案 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;
}
我能够产生以下内容。这当然是在点击按钮后。
您是否绑定了未提及的数据源?
答案 2 :(得分:0)
确保在页面加载中绑定checkboxlist时你设置了这个检查是否(!Page.IsPostBack){...绑定你的数据}
这应该可以解决问题
答案 3 :(得分:-2)
我认为您需要检查CHECKED属性,而不是SELECTED。