我在代码隐藏后添加它们时尝试访问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,我现在不会有多少。所以,我需要循环通过。 我错过了一些属性或我需要怎么做?
答案 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强制转换为下拉列表 - 如上所述,您需要确保在页面之前尽快重新创建控件。控制数据被写入或读取。
如果您过早尝试,或者没有创建控件,您将无法获得任何结果。