c# - 将控件数组添加到 aspx 页面

标签 c# asp.net arrays controls

我正在尝试将一组控件添加到 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/

相关文章:

c# - WPF Treeview 只扩展到一定深度?

c# - 小查询应该异步吗?

Java根据元素编号重新排列数组

c# - 如何优雅地复制图形(神经网络)

c# - 整个方法只有一个 return()

c# - 在 C# 中创建特定时区的 DateTime

python - 连接/附加不同大小的多个垂直数组

c# - Javascript 在 UpdatePanel 附近不起作用

asp.net - 如何在 asp.net 面板的中心创建一个链接按钮?

javascript - 来自指定数组的元素对,其总和等于特定目标数