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

时间:2015-10-30 18:04:47

标签: c# asp.net

我在ListView中有以下标记,每行都有一个Checkbox对象 - 我希望找到所选的复选框值:

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

我尝试使用以下内容查找复选框的选定,但似乎无法找到查找所选文本以外的任何内容的方法。我在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();

感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

服务器端CheckBox control不会将此类属性公开为value,因此您指定的内容将被视为自定义属性。要访问它,请使用:

x.Attributes["value"]

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

x.InputAttributes["value"]

然而,因为这是一个仅用于渲染的自定义属性,所以我并不完全可以在帖子上提供这样的访问权限。如您所见,CheckBox控件不支持值。不管怎样,试一试。

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

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

在你背后的代码当然需要改变你所控制的类。