【问题标题】:CheckBoxList ListItem.Selected Not FunctioningCheckBoxList ListItem.Selected 不起作用
【发布时间】:2016-06-22 13:21:24
【问题描述】:

我的 asp.net 网页上有一个 CheckBoxList,其中列表项硬编码到 HTML 中(因此没有回发/数据绑定问题)。当有人单击提交按钮时,我会遍历 CheckBoxList 中的项目并创建一个逗号分隔的任何选中值的字符串。然而,问题在于,无论如何,listitem 的 .Selected 属性始终为假。我找到的所有解决方案都必须声明检查 !Page.IsPostBack 以确保数据没有被擦除,但是 a)我已经检查过了 b)这不是一个真正的问题,因为我没有动态加载列表控件。以下是我的代码:

标记

 <asp:CheckBoxList id="chkGenderList" runat="server" data-paramname="genders">
    <asp:ListItem Value="M" Text="Male" />
    <asp:ListItem Value="F" Text="Female" />
    <asp:ListItem Value="" Text="Unknown" />
</asp:CheckBoxList>

代码背后

 private string GetCheckBoxListValues(CheckBoxList chkList)
 {
    StringBuilder sb = new StringBuilder ();
    foreach (ListItem lst in chkList.Items) {
        if (lst.Selected)
            sb.Append (lst.Value).Append (",");
    }
    if(sb.Length > 0)
        sb.Remove (sb.Length - 1, 1);
    return sb.ToString ();
 }

我可以单步执行并遍历列表。我在传递给方法的复选框列表中当然有项目,但是每个 ListItem, .Selected 都是错误的。有什么想法吗?

【问题讨论】:

  • 为什么要使用 CheckBoxList?您真的希望用户在这里选择多个值吗?或者这只是你想要做的一个例子?
  • 什么时候调用这个方法?处于页面生命周期的哪个阶段?
  • 当我在按钮单击的事件处理程序中测试您的代码时,它可以完美运行。
  • 我运行了你的代码。这对我来说可以。我做的唯一不同的事情是我没有检查 Page.IsPostback。相反,我检查有效性: if (Page.IsVAlid) {...}.
  • 我正在使用复选框列表,因为这是用于搜索表单。所以我合法地需要为用户提供指定多个值的能力(而不是在这种情况下我会使用单选按钮的单个值)。

标签: c# asp.net


【解决方案1】:

如果我有一个空白的 .aspx 页面并将下面的代码粘贴到其中,它可以工作。

尝试做同样的事情来解决你的问题 - 从一个空白页开始,将下面的代码复制到其中,然后慢慢开始添加任何其他的 controls\functionality\ajax\javascript 文件,直到代码停止工作,然后你就会知道什么导致您的问题。

可能有一段 javascript 取消选中所有复选框或类似的东西。

.ASPX:

 <asp:CheckBoxList ID="chkGenderList" runat="server" data-paramname="genders">
        <asp:ListItem Value="M" Text="Male" />
        <asp:ListItem Value="F" Text="Female" />
        <asp:ListItem Value="" Text="Unknown" />
    </asp:CheckBoxList>
    <asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />

背后的代码:

protected void Page_Load(object sender, EventArgs e)
{

}

protected void btnSave_Click(object sender, EventArgs e)
{
    string values = this.GetCheckBoxListValues(chkGenderList);
}

private string GetCheckBoxListValues(CheckBoxList chkList)
{
    StringBuilder sb = new StringBuilder();
    foreach (ListItem lst in chkList.Items)
    {
        if (lst.Selected)
            sb.Append(lst.Value).Append(",");
    }
    if (sb.Length > 0)
        sb.Remove(sb.Length - 1, 1);
    return sb.ToString();
}

输出:

【讨论】:

  • 感谢您的信息!我有一种感觉,它可能是包装这个控件的更新面板。我会尝试一下,看看我是否能找到冲突。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 2012-03-20
  • 2014-11-05
  • 1970-01-01
相关资源
最近更新 更多