除了复选框和标签外,我还有一个CheckBoxList,我必须为CheckBoxList中的每个列表项添加一个隐藏字段。有没有办法做到这一点? 预先感谢。
答案 0 :(得分:0)
您可以使用Repeater代替CheckBoxList控件来实现。从好的方面来说,这使您可以更好地控制所生成的HTML,如果您打算使用jQuery访问项目,那么无论如何它都可能会派上用场;另一方面,您必须实现一些方法,例如自己检索已检查的项目。
以下示例显示了基本标记:
<asp:Repeater ID="rpt" runat="server">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li>
<asp:CheckBox ID="chk" runat="server" Text='<%# Eval("Item1") %>' />
<asp:HiddenField ID="hidden" runat="server" Value='<%# Eval("Item2") %>' />
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
在此示例中,我已将转发器绑定到Tuple<string, string>
值列表中。您可以通过重复转发器的项目并检索CheckBox和HiddenField来检索所选的项目:
private IEnumerable<Tuple<string, string>> GetSelectedItems()
{
var lst = new List<Tuple<string, string>>();
var items = rpt.Items
.OfType<RepeaterItem>()
.Where(x => x.ItemType == ListItemType.Item
|| x.ItemType == ListItemType.AlternatingItem);
foreach (var item in items)
{
var chk = (CheckBox)item.FindControl("chk");
if (chk.Checked)
{
var hidden = (HiddenField)item.FindControl("hidden");
lst.Add(Tuple.Create(chk.Text, hidden.Value));
}
}
return lst.ToArray();
}