получить значение всех отмеченных флажков при нажатии кнопки - PullRequest
0 голосов
/ 18 февраля 2019

Я создал таблицу в моем .aspx файле, который выглядит следующим образом:

enter image description here

Вот код, который делает это:

<!-- code for generating the "add selected sessions" button -->
<table>
    <tr>
        <td><strong>Individual Sessions</strong></td>
        <td >
            <div class="addButton" style="text-align: center;">
                <asp:LinkButton ID="LinkButton2" runat="server" Text="Add Selected Sessions" OnClick="btnAddToCart_Click" />
            </div>
        </td>
    </tr>
</table>

<!-- add all the sessions for the user to select -->
<asp:Repeater ID="rptFeesSession" runat="server">
    <HeaderTemplate>
        <table >
    </HeaderTemplate>
    <ItemTemplate>
        <asp:HiddenField ID="hdnIsSession" runat="server" Value='<%#Eval("isSession")%>' />
        <tr runat="server" visible='<%# Eval("isSession")%>'>
            <td valign="top" colspan="2" style="position: relative;">
                <asp:HyperLink CssClass="siteColorFG popBtn" ID="hlFeeType" runat="server" Text='<%#Eval("title")%>' NavigateUrl="javascript:;"/>
            </td>
            <td valign="top">
                <div class="">
                    <asp:CheckBox ID="LinkButton3" CommandArgument='<%#Eval("id")%>'CssClass="checkB" OnClick="btnAddToCart_Click" runat="server" Text='<%#Eval("amount", "{0:C}")%>' />
                </div>
            </td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

В своем файле кода я хочу захватить все отмеченные флажки и соответствующие им значения CommandArgument.

protected void btnAddToCart_Click(object sender, EventArgs e)

{
    using (MyEntities db = new MyEntities())
    {
        //button was clicked. fetch all the check boxes from the rptFeesSession repeater into an int[]


    }
}

1 Ответ

0 голосов
/ 18 февраля 2019

В вашем коде есть несколько проблем (включая концептуальные / логические)

  1. События элемента в Repeater должны адресовать вещи, связанные с элементом.
  2. Click обработчик событий имеетнет доступа к атрибуту CommandArgument.Вместо этого используйте Command.
  3. Checkbox элемент управления не поддерживает событие onclick.
  4. Checkbox события могут запускаться немедленно только при наличии AutoPostback="true".

Если вы хотите обновить все данные ретранслятора при изменении любого флажка, вы можете сделать что-то вроде этого.

<asp:ScriptManager runat="server" ID="scriptMgr" /><%-- Strongly recommended --%>
<asp:UpdatePanel runat="server">
    <ContentTemplate>
        <asp:Repeater ID="rptFeesSession" runat="server">
            <HeaderTemplate>
                <table>
            </HeaderTemplate>
            <ItemTemplate>
                <asp:HiddenField ID="hdnIsSession" runat="server" Value='<%#Eval("isSession")%>' />
                <tr runat="server" visible='<%# Eval("isSession")%>'>
                    <td colspan="2" style="position: relative;">
                        <asp:HyperLink CssClass="siteColorFG popBtn" ID="hlFeeType" runat="server" Text='<%#Eval("title")%>' NavigateUrl="javascript:;" />
                    </td>
                    <td>
                        <div class="">
                            <asp:HiddenField runat="server" ID="hidID" Value='<%#Eval("id") %>' />
                            <asp:CheckBox ID="LinkButton3"
                                AutoPostBack="true" CssClass="checkB"
                                OnCheckedChanged="LinkButton3_CheckedChanged" runat="server"
                                Text='<%#Eval("amount", "{0:C}")%>' />
                        </div>
                    </td>
                </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:Repeater>
    </ContentTemplate>
</asp:UpdatePanel>


//.cs
protected void LinkButton3_CheckedChanged(object sender, EventArgs e)
{
    decimal total = 0;
    using (MyEntities db = new MyEntities())
    {
        foreach (RepeaterItem item in rptFeesSession.Items)
        {
            var chk = item.FindControl("LinkButton3") as CheckBox;
            if(chk!=null && chk.Checked){
                string id = (item.FindControl("hidID") as HiddenField).Value;
                total += decimal.Parse(chk.Text);
                //do stuff
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...