从ListView中获取选定的复选框值

本文关键字:复选框 ListView 获取 | 更新日期: 2023-09-27 18:19:53

我在ListView中有以下标记,每行都有一个复选框对象-从中我想找到选定的复选框值:

<asp:ListView ID="chkboxList" runat="server" DataKeyNames="id">
    <LayoutTemplate>
        <table id="audiencechklistbox" class="table table-striped  bootstrap-datatable datatable dataTable table-hover">
            <tr>
                <th>Audience Name</th>
            </tr>
            <asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
            </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr>
        <td>
            <asp:CheckBox ID="audienceList" value='<%# Eval("id") %>' Text='<%# Eval("name") %>' runat="server" CssClass="checkbox_nowrap"/>
        </td>
            </tr>
    </ItemTemplate>
</asp:ListView>

我正在尝试使用以下内容来查找复选框的Selected,但似乎找不到除所选文本之外的其他方法。我在SO中看了很多类似的问题,但似乎找不到符合我情况的问题。

如何查找所选值而不是复选框显示的文本?我的Lambda表达式没有为x.value.提供Intellisense选项

        var findCheckedQuery = chkboxList.Controls[0]
            .Controls
            .Cast<Control>()
            .Select(ctrl => ctrl.FindControl("audienceList") as CheckBox)
            .Where(chk => chk != null && chk.Checked);                
            String[] result = findCheckedQuery.Select(x => x.Text).ToArray();

感谢您的帮助。提前谢谢。

从ListView中获取选定的复选框值

服务器端CheckBox控件不公开value这样的属性,因此您指定的属性将被视为自定义属性。要访问它,请使用:

x.Attributes["value"]

或者(不确定哪一个会起作用)

x.InputAttributes["value"]

然而,由于这是一个仅用于渲染的自定义属性,我并不完全清楚,它甚至可以在帖子背面进行访问。正如您所看到的,CheckBox控件不支持值。不过还是试一试吧。

如果它不起作用,请考虑HtmlInputCheckBox,它是一个稍微有限的控件,但确实提供了必要的Value属性。在标记中,这应该像一样简单

<input ID="audienceList" Value='<%# Eval("id") %>' Text='<%# Eval("name") %>' runat="server" CssClass="checkbox_nowrap"/>

当然,在后面的代码中,您需要更改将控件转换为的类。