将隐藏字段添加到复选框列表

时间:2019-02-19 08:12:40

标签: c# jquery asp.net

除了复选框和标签外,我还有一个CheckBoxList,我必须为CheckBoxList中的每个列表项添加一个隐藏字段。有没有办法做到这一点? 预先感谢。

1 个答案:

答案 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();
}