Asp.net中的DropDownList问题

时间:2014-09-30 12:26:22

标签: c# asp.net collections

如何在Collection中的aspx页面中获取许多DropDownList的ID名称?

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

2 个答案:

答案 0 :(得分:0)

  

您能告诉我如何在List中获取现有DDL的ID吗?假设有100个DDls

你有几个选择......

  1. 分别获取每个控件的ID
  2. 遍历Controls集合并测试每个元素是否为DropDownList
  3. 类型
  4. 将控件存储在集合中,然后从该集合中选择ID
  5. 第一个选项是最简单的,如果你只需要做一次那么它可能是最简单的:

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

答案 1 :(得分:0)

基于对另一个问题的评论我理解你的问题是你已经为页面添加了控件,现在你想要阅读所有这些控件。为此,您需要以递归方式读取页面上的所有控件,并找到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;
}