繁体   English   中英

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

[英]Retrieving dynamic asp.net checkbox controls - controls are added to page in repeater, but can't retrieve in postback (C#)

我的页面上有一组使用中继器生成的复选框。 复选框适用于我的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;
        }
    }

<div class="databases">
    <asp:Repeater runat="server" ID="rptDatabases" OnItemDataBound="rptDatabases_OnItemDataBound">
        <ItemTemplate>
            <asp:CheckBox runat="server" ID="checkboxDatabase"/>
        </ItemTemplate>
    </asp:Repeater>

但是,我无法在回发中弄清楚如何从它们中检索所需的数据。 首先,我尝试了这个:

 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;
} 

但这找不到任何复选框,当我逐步执行时,我发现它根本没有检索任何复选框控件。 所以我改变了它从form1.ControlsrptDatabases.Controls得到中继器中的控件。 但是,尽管这会检索所有复选框控件,但会将它们作为RepeaterItem对象返回。 在这行上:

var checkbox = ctrl as CheckBox;

复选框最终为空。 我无法将RepeaterItem转换为CheckBox,也无法访问Text属性,这是我需要找出要添加的值的属性。

我也试过了(var ctrl in rptDatabases.Controls.OfType<CheckBox>())但是没有返回任何项目。

使用foreach (var ctrl in form1.Controls)可以获取页面上的所有控件,但是这些复选框位于另一个控件中,因此无法使用。

您需要在RepeaterItem中循环RepeaterItem项目,然后找到该项目中的复选框。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM