繁体   English   中英

如何在asp:Repeater中的asp:CheckBoxList中获取所有选中的复选框

[英]How to get all checked checkboxes in an asp:CheckBoxList inside an asp:Repeater

在页面加载时,将始终取消选中复选框,然后用户将选择相关选项,然后单击“保存”。 复选框列表的大小可能有所不同。

我需要形成已选中复选框的列表,并将它们传递到保存函数中,我的代码如下:

HTML

<asp:Repeater runat="server" ID="RpTriggerEmails" OnItemDataBound="RpTriggerEmails_OnItemDataBound">
            <HeaderTemplate>
                <ul class="trigger-repeater">
            </HeaderTemplate>
            <ItemTemplate>
                <li class="trigger-repeater-item">
                    <h4><asp:Literal runat="server" ID="LtName"></asp:Literal></h4>
                    <asp:CheckBoxList runat="server" ID="CblAttendees"/>
                </li>
            </ItemTemplate>
            <FooterTemplate>
                </ul>
            </FooterTemplate>
        </asp:Repeater>
    <asp:LinkButton  ID="PlainLinkButton1" runat="server" CausesValidation="true" OnClick="LbSave_OnClick"/>

C#

protected void RpTriggerEmails_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            var email = e.Item.DataItem as TriggeredEmail;
            if (email != null)
            {
                CheckBoxList CblAttendees = e.Item.FindControl("CblAttendees") as CheckBoxList;
                if (CblAttendees != null)
                {
                    CblAttendees.DataSource = Controller.GetBooking().Attendee;
                    CblAttendees.DataBind();
                    CblAttendees.DataTextField = "Reference";
                    CblAttendees.DataValueField = "AttendeeId";
                }
            }
        }
    }
    protected void LbSave_OnClick(object sender, EventArgs e)
    {
        Controller.SendTriggers(chosenCheckBoxes);
    }

我必须更改一些代码才能得到想要的结果,但这可以获取正确的信息:

它不再使用CheckBoxList,因为这带来了枚举问题,将其更改为中继器对我来说是最容易理解的(我是学生,但经验不足)。

HTML

<asp:Repeater runat="server" ID="RpTriggerEmails" Visible="False" OnItemDataBound="RpTriggerEmails_OnItemDataBound">
            <HeaderTemplate>
                <ul class="trigger-repeater">
            </HeaderTemplate>
            <ItemTemplate>
                <li class="trigger-repeater-item">
                    <asp:HiddenField runat="server" ID="HfTriggerEmailId"/>
                    <h4><asp:Literal runat="server" ID="LtTriggerName"></asp:Literal></h4>
                    <asp:Repeater runat="server" ID="RpAttendees" OnItemDataBound="RpAttendees_OnItemDataBound">
                        <HeaderTemplate>
                            <ul class="attendee-repeater">
                        </HeaderTemplate>
                        <ItemTemplate>
                            <li class="attendee-repeater-item">
                                <asp:HiddenField runat="server" ID="HfAttendeeId"/>                                
                                <asp:CheckBox runat="server" ID="CbAttendee"/>
                            </li>
                        </ItemTemplate>
                        <FooterTemplate>
                            </ul>
                        </FooterTemplate>
                    </asp:Repeater>
                </li>
            </ItemTemplate>
            <FooterTemplate>
                </ul>
            </FooterTemplate>
        </asp:Repeater>

C#

protected void LbSave_OnClick(object sender, EventArgs e)
    {
        foreach (RepeaterItem riTrig in RpTriggerEmails.Items)
        {
            HiddenField hfTrig = riTrig.FindControl("HfTriggerEmailId") as HiddenField;
            if (hfTrig != null)
            {
                foreach (RepeaterItem riAtt in ((Repeater) riTrig.FindControl("RpAttendees")).Items)
                {
                    CheckBox cb = riAtt.FindControl("CbAttendee") as CheckBox;
                    HiddenField hf = riAtt.FindControl("HfAttendeeId") as HiddenField;
                    if (cb != null && cb.Checked &&
                        hf != null && !hf.Value.IsNullOrEmpty())
                        checkboxes.Add(new GenericPair<int, int>(int.Parse(hf.Value),
                            int.Parse(hfTrig.Value)));
                }
            }
        }

        Controller.SendTriggers(checkboxes);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM