1

也许是一个愚蠢的问题,但我需要一些关于如何在发布表单时读取转发器内的复选框值的帮助。我有一个表单,在这个表单内我有一个中继器,在每个 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">>

我想不出一个好的方法来做到这一点,所以如果有人有任何建议,我将非常感激!

4

2 回答 2

1

尝试使用代码:

for(int i = 0; i < FormInputValues.Items.Count; i++)
{
 CheckBoxList chklist = (CheckBoxList)FormInputValues.Items[i].FindControl("CheckBoxValues");
}

您将获得每个CheckBoxListinchklist对象,您可以遍历它以获取选定的复选框。

您可以编写如下代码来遍历CheckBoxList

foreach (ListItem listItem in clbIncludes.Items)
{
    if (listItem.Selected) { 
    //do some work 
}
    else { 
    //do something else 
    }
}

哪里clbIncludesCheckBoxList

您可以foreach在循环内使用for循环来实现您需要的东西。

于 2013-08-27T16:44:17.933 回答
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.

于 2013-08-27T18:09:14.903 回答