我在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();
感谢任何帮助。提前谢谢。
答案 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"/>
在你背后的代码当然需要改变你所控制的类。