0

从代码隐藏中添加它们后,我试图在 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,我现在不知道会有多少。所以,我需要循环。我错过了一些属性还是我需要怎么做?

4

2 回答 2

2

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

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

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

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

于 2012-11-16T09:47:46.467 回答
0
foreach(DropDownList ddl in FiltersDiv.Controls.OfType<DropDownList>())
{
    Trace.Write(ddl.SelectedValue);
}

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

如果您过早尝试此操作,或者尚未创建控件,您将不会得到任何结果。

于 2012-11-16T09:53:03.117 回答