如何获取集合中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
你有几个选择。。。
- 单独获取每个控件的ID
- 循环使用
Controls
集合,并测试每个元素的类型是否为DropDownList
- 将控件存储在集合中,并从该集合中选择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);