【问题标题】:Checkbox List evaluating all checkmarks as false复选框列表评估所有复选标记为假
【发布时间】:2013-05-17 20:19:47
【问题描述】:

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

【问题讨论】:

  • C# 是 .Net 代码。我会改变的
  • 仅供参考,您应该查看string.Join,它将有助于在没有所有字符串连接的情况下创建分隔的内容列表,并且还可以避免您的代码具有尾随分隔符。
  • 您确定CheckBoxList中的任何项目都被选中了吗?
  • 您是否对 Page_Load 中的列表进行了绑定或操作?
  • 您是否有代码在页面加载(或其他事件)时将复选框动态添加到列表中?如果是这样,它们可能会在每次回发时被清除并重新添加。您的页面加载应该在该部分周围有一个if(!page.ispostback)

标签: c# asp.net


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      这应该可以解决问题

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 当我编辑 if 语句 ckblInterests.Items[i].Checked 时,它会抛出一个错误,指出 ListItem 不包含“已检查”的定义
        猜你喜欢
        • 1970-01-01
        • 2014-04-15
        • 2012-06-04
        • 1970-01-01
        • 2019-03-14
        • 2013-04-26
        • 1970-01-01
        • 1970-01-01
        • 2014-06-20
        相关资源
        最近更新 更多