C# 检索动态asp.net复选框控件-控件已添加到repeater中的页面,但无法在回发(C)中检索

C# 检索动态asp.net复选框控件-控件已添加到repeater中的页面,但无法在回发(C)中检索,c#,asp.net,checkbox,controls,repeater,C#,Asp.net,Checkbox,Controls,Repeater,我的页面上有一组复选框,它们是使用中继器生成的。复选框用于我的web配置中的每个数据库,其思想是使用它们来选择要搜索的数据库。我让它们由转发器生成,因为我希望我的代码是动态的,可以在任何项目中工作——因此,数据库名称不能硬编码,我也没有硬编码的ID protected void rptDatabases_OnItemDataBound(object sender, RepeaterItemEventArgs e) { var databaseName = e.It

我的页面上有一组复选框,它们是使用中继器生成的。复选框用于我的web配置中的每个数据库,其思想是使用它们来选择要搜索的数据库。我让它们由转发器生成,因为我希望我的代码是动态的,可以在任何项目中工作——因此,数据库名称不能硬编码,我也没有硬编码的ID

    protected void rptDatabases_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        var databaseName = e.Item.DataItem as string;
        CheckBox checkbox = e.Item.FindControl("checkboxDatabase") as CheckBox;
        if (checkbox != null)
        {
            checkbox.Attributes["data-id"] = databaseName;
            checkbox.Text = databaseName;
        }
    }
复选框最终为空。我无法将RepeaterItem强制转换为复选框,也无法访问Text属性,我需要它来确定要添加的值

我还尝试了rptDatabases.Controls.OfType中的var-ctrl,但没有返回任何项。

使用form1.Controls中的foreach-var-ctrl。您将获得页面上的所有控件,但这些复选框位于另一个控件中,因此无法工作

您需要在中继器中循环RepeaterItem项,并在该项中找到复选框

foreach (RepeaterItem item in rptDatabases.Items)
{
    CheckBox checkbox = item.FindControl("checkboxDatabase") as CheckBox;

    if (checkbox != null && checkbox.Checked)
    {
        selectedDatabases.Add(checkbox.Text);
    }
}

这得到了它们,但没有正确返回复选框。选中-它返回所有它们为False,那么您可能没有将中继器的数据绑定包装在iPostBack检查中,如果!Page.IsPostBack{//bind repeater here}
 public List<string> GetSelectedDatabases()
{
    var selectedDatabases = new List<string>();
    foreach (var ctrl in form1.Controls)
    {
        var checkbox = ctrl as CheckBox;
        if (checkbox != null)
        {
            if (checkbox.Checked)
            {
                selectedDatabases.Add(checkbox.Text);
            }
        }
    }
    return selectedDatabases;
} 
var checkbox = ctrl as CheckBox;
foreach (RepeaterItem item in rptDatabases.Items)
{
    CheckBox checkbox = item.FindControl("checkboxDatabase") as CheckBox;

    if (checkbox != null && checkbox.Checked)
    {
        selectedDatabases.Add(checkbox.Text);
    }
}