【问题标题】:get the value of all the checked checkboxes on button click获取按钮单击时所有选中复选框的值
【发布时间】:2019-02-18 10:33:10
【问题描述】:

我在.aspx 文件中创建了一个表格,如下所示:

这是执行此操作的代码:

<!-- 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[]


    }
}

【问题讨论】:

    标签: asp.net checkbox repeater


    【解决方案1】:

    您的代码中有几个问题(包括概念/逻辑)

    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
                }
            }
        }
    }
    

    【讨论】:

    • 谢谢。这很有用。我会进行这些编辑。但我真正想要的是,在单击按钮时,我想找出所有被选中的复选框。检查项目时我不想做任何事情。
    • 好的。如果您不想立即更新,请不要包含autopostback="true",代码将在addButton_Click 上运行。
    • 为什么要加上&lt;asp:ScriptManager runat="server" ID="scriptMgr" /&gt;&lt;%-- Strongly recommended --%&gt;&lt;asp:UpdatePanel runat="server"&gt;&lt;ContentTemplate&gt;这三行?
    • 当点击“添加选定的会话”时,上面的代码如何抓取所有的复选框?我看不到您如何显示在按钮单击时会发生某些事情。您只提供了用于复选框单击的代码。
    • 1. ScriptManagerUpdatePanel 是可选的/建议避免完全回发。 2. Add Selected Sessions 不包括在 OP 和我的答案中。如果 autopostback="true" 未触发所有复选框,则其 click 事件将触发所有复选框的 OnCheckedChanged 事件。
    猜你喜欢
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多