我正在尝试将一组控件添加到 aspx 页面(C# 代码隐藏)。这些是类似的控件(单独字段的搜索条件,但将具有相同的值)。下拉控件值当前在 Page_Load 方法中设置,如下所示:
protected void Page_Load(object sender, EventArgs e) {
ListItem[] items = new ListItem[3];
//these values are actually set by a database query
items[0] = new ListItem('Apple', 'Apple');
items[1] = new ListItem('Orange', 'Orange');
items[2] = new ListItem('Banana', 'Banana');
FruitDropDown.Items.AddRange(items);
FruitDropDown.DataBind();
}
然后在页面上我有一个像这样的控件:
<asp:DropDownList ID="FruitDropDown" runat="server"/>
这工作正常并填充控件,但我现在想创建一个包含这些下拉列表的数组 - 将有 20 个,所以我不想在 Page_Load 方法中创建它 20 次。我是否应该在列表中添加下拉列表人口然后执行类似的操作:
<asp:DropDownList ID="FruitDropDown[0]" runat="server"/>
<asp:DropDownList ID="FruitDropDown[1]" runat="server"/>
我如何在页面上标记它们,然后才能在 Controller 中访问这些值?如果我已经将那些命名控件添加到 aspx 页面,我可以做这样的事情吗?
protected void Page_Load(object sender, EventArgs e) {
ListItem[] items = new ListItem[3];
//these values are actually set by a database query
items[0] = new ListItem('Apple', 'Apple');
items[1] = new ListItem('Orange', 'Orange');
items[2] = new ListItem('Banana', 'Banana');
for (int x = 0; x < 20; x++) {
FruitDropDown[x].Items.AddRange(items);
FruitDropDown[x].DataBind();
}
难道这也需要复制粘贴aspx页面上的控件20次?如果它扩展到 100 会怎样?我可以在 aspx 页面上循环添加它们吗?
最佳答案
Control.FindControl是你要找的。您可以在任何控件(如页面本身)上使用它来通过其 NamingContainer 查找控件.把它们放在例如在面板中并在其上使用 FindControl。
for (int x = 0; x < 20; x++) {
DropDownList ddlFruit = (DropDownList)FruitPanel.FindControl("FruitDropDown" + x);
ddlFruit.Items.AddRange(items[x]);
}
您也可以动态创建它们:
for (int x = 0; x < 20; x++) {
DropDownList ddlFruit = new DropDownList();
ddlFruit.ID = "FruitDropDown" + x
ddlFruit.Items.AddRange(items[x]);
FruitPanel.Controls.Add(ddlFruit);
}
您必须最迟在 Page_Load 中使用与之前相同的 ID 在每个回发中重新创建动态创建的控件,以确保正确加载 ViewState 并触发事件。
关于c# - 将控件数组添加到 aspx 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7746513/