Asp.net中的DropDownList问题



如何获取集合中aspx页面中多个DropDownList的ID名称?

DropDownList ddl = new DropDownList();
    string s=ddl.ID;
    List<string> li = new List<string>();
    li.Add(s);

根据对另一个问题的评论,我理解您的问题是,您已经向页面添加了控件,现在您想将所有控件都读回。要做到这一点,你需要递归地读取页面上的所有控件,并找到DropDownList类型的控件,有点像以下内容:

protected void Page_Load(object sender, EventArgs e)
{
    var dropdownListIds = new List<string>();
    var allControls = GetControlsRecursively(this);
    foreach (var ctrl in allControls)
    {
        var ddl = ctrl as DropDownList;
        if (ddl != null)
        {
            dropdownListIds.Add(ddl.ID);
        }
    }
}
private List<Control> GetControlsRecursively(Control parent)
{
    var allControls = new List<Control>();
    foreach (Control child in parent.Controls)
    {
        allControls.Add(child);
        allControls.AddRange(GetControlsRecursively(child));
    }
    return allControls;
}

你能告诉我如何获取列表中现有DDL的ID吗?假设有100个DDls

你有几个选择。。。

  1. 单独获取每个控件的ID
  2. 循环使用Controls集合,并测试每个元素的类型是否为DropDownList
  3. 将控件存储在集合中,并从该集合中选择ID

第一个选项是最直接的,如果你只需要做一次,那么它可能是最简单的:

var list = new List<string>();
list.Add(dropDownList1.ID);
list.Add(dropDownList2.ID);
list.Add(dropDownList3.ID);
list.Add(dropDownList4.ID);
// etc...

第二种选择是代码最少,但也是最不可靠的。它可能看起来像这样:

var list = new List<string>();
foreach (var control in Controls)
    if (control is DropDownList)
        list.Add((control as DropDownList).ID);

但是,这将仅获得作为Controls集合的直接元素的控件。如果它们中的任何一个嵌套在其他控件中,则可能找不到它们。你可以让它更递归地解决这个问题,但这只会让它更脆弱,更容易出错。

如果要多次查询DropDownList控件的列表,那么第三个选项可能是最好的。您在这里主要做的是在类级别为页面静态创建控件列表。类似这样的东西:

private List<DropDownList> MyDropDownLists { get; set; }
// the page constructor
public MyPage()
{
    MyDropDownLists.Add(dropDownList1);
    MyDropDownLists.Add(dropDownList2);
    MyDropDownLists.Add(dropDownList3);
    MyDropDownLists.Add(dropDownList4);
    // etc...
    // You might even extract all of this into a CollectDropDownLists function
}

然后,任何时候你需要查询该列表,你都可以很容易地做到:

var listOfIDs = MyDropDownLists.Select(d => d.ID);

最新更新