【发布时间】: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) {...}.
-
我正在使用复选框列表,因为这是用于搜索表单。所以我合法地需要为用户提供指定多个值的能力(而不是在这种情况下我会使用单选按钮的单个值)。