如果我从代码中添加它们,如何访问DropDownList控件

时间:2012-11-16 09:45:23

标签: asp.net

我在代码隐藏后添加它们时尝试访问div中的DropDownList。 如果我将DropDownList添加到我的.aspx页面,如下所示:

<div id="FiltersDiv" runat="server">
                <asp:DropDownList ID="DropDownListMenu" runat="server" 
                      DataTextField="name" DataValueField="id"
                    AutoPostBack="true" 
                      onselectedindexchanged="DropDownListMenu_SelectedIndexChanged" >
                </asp:DropDownList>

我可以随时访问

protected void AddButton_Click(object sender, EventArgs e)
 {
   var dl = addProductLocationFiltersDiv.Controls.OfType<DropDownList>();
 }

但如果我从代码中添加

则不行
var ddl = new DropDownList();
 ddl.DataSource = flist;
 ddl.DataTextField = "name";
 ddl.DataValueField = "id";
 ddl.DataBind();
 FiltersDiv.Controls.Add(ddl);

我需要添加几个DropDownList,我现在不会有多少。所以,我需要循环通过。 我错过了一些属性或我需要怎么做?

2 个答案:

答案 0 :(得分:2)

通过代码添加控件时,可以通过变量名访问它。

如果您需要访问其中的几个,请考虑将其放入List<DropDownList>(如果您有不同类型的控件,则为List<Control>。)

如果您需要在代码后面的共享这些方法,请使用字段而不是局部变量。

请注意,由于ASP.NET page lifecycle的工作方式,您可能需要在每次回发时重新创建这些内容,否则您将无法访问它们。动态重新创建此类控件的最佳位置是OnInit处理程序。

答案 1 :(得分:0)

foreach(DropDownList ddl in FiltersDiv.Controls.OfType<DropDownList>())
{
    Trace.Write(ddl.SelectedValue);
}

这是我的首要任务,因此您可能需要将FiltersDiv强制转换为下拉列表 - 如上所述,您需要确保在页面之前尽快重新创建控件。控制数据被写入或读取。

如果您过早尝试,或者没有创建控件,您将无法获得任何结果。