也许是一个愚蠢的问题,但我需要一些帮助,以便在发布表单时如何读取转发器中的复选框值。我有一个表单,在这个表单中我有一个Repeater,在每个ItemTemplate中我有一个CheckBoxList。这是我的代码有点简化:
<form method="post">
<asp:Repeater runat="server" ID="FormInputValues">
<ItemTemplate>
<asp:CheckBoxList runat="server" ID="CheckBoxValues"
DataSource='<%# ((FormOptions)Container.DataItem).Options %>' />
</ItemTemplate>
</asp:Repeater>
<br />
<asp:LinkButton ID="SelectorNext" CssClass="button" OnClick="SelectorNext_Click"
Text="Next" runat="server" />
</form>
我的问题是我需要能够将每个CheckBoxList中的所有已检查项目及其相关数据项映射。类似这样的内容:
Dictionary<"DataItem.ID", List<"CheckBox.Value">>
我无法找到一个好方法,所以如果有人有任何建议,我会非常感激!
答案 0 :(得分:0)
尝试使用代码:
for(int i = 0; i < FormInputValues.Items.Count; i++)
{
CheckBoxList chklist = (CheckBoxList)FormInputValues.Items[i].FindControl("CheckBoxValues");
}
您将获得CheckBoxList
对象中的每个chklist
,您可以遍历它以获取所选复选框。
您可以使用以下代码遍历CheckBoxList
:
foreach (ListItem listItem in clbIncludes.Items)
{
if (listItem.Selected) {
//do some work
}
else {
//do something else
}
}
其中clbIncludes
是CheckBoxList
您可以在foreach
循环内使用for
循环来实现所需的功能。
答案 1 :(得分:0)
试试这个:
Protected function repeater1_ItemCreated(Object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
CheckBoxList checkBoxValues = (CheckBoxList)e.Item.FindControl("CheckBoxValues");
String selectedValue = checkBoxValues.SelectedValue;
//Do your stuff ...
}
}
ItemCreated事件是您需要的事件,在那里您可以更改每个中继器项目的外观。
另一个答案也是正确的,但是这个例子性能更高,因为您不需要遍历所有转发器项,也不需要遍历CheckBoxList
中的每个复选框。