C# 检索动态asp.net复选框控件-控件已添加到repeater中的页面,但无法在回发(C)中检索
我的页面上有一组复选框,它们是使用中继器生成的。复选框用于我的web配置中的每个数据库,其思想是使用它们来选择要搜索的数据库。我让它们由转发器生成,因为我希望我的代码是动态的,可以在任何项目中工作——因此,数据库名称不能硬编码,我也没有硬编码的IDC# 检索动态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
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);
}
}