基于另一个下拉列表中的选定值动态填充下拉列表

问题描述:

我有两个下拉列表,其中一个在页面加载时填充,另一个只在第一个列表中选择一个值时填充。基于另一个下拉列表中的选定值动态填充下拉列表

<asp:DropDownList ID = "base_ddl" runat="server" ToolTip="Base" OnSelectedIndexChanged = "BaseSelected"> 
// snip... 
</asp:DropDownList> 

然后,第二下拉列表(secondary_ddl)在OnSelectedIndexChanged方法,BaseSelected填充:作为第一个下拉列表中定义。

public void BaseSelected(object sender, EventArgs e) 
    { 
     if (base_ddl.SelectedValue == "-1") 
     { 
      secondary_ddl.Visible = false; 
     } 
     else 
     { 
      secondary_ddl.Items.Clear(); 

      // extract information to populate dropdown here 
      // snip. 
      IList<InfoContainer> info = getInfoBasedOnSelected(base_ddl.Value); 

      foreach (InfoContainer i in info) 
      { 
       secondary_ddl.Items.Add(new ListItem(i.name, i.value)); 
      } 
     } 
    } 

这是不行的,这会导致这样一个问题:为什么?我如何动态更新OnSelectedIndexChanged函数的下拉菜单?

+1

首先你不需要在第二个下拉数据绑定为你添加项目到它的。并检查你的清单是否有任何价值? – Zaki 2013-03-18 17:54:59

+0

@Samim我不这么认为,这是在调试时添加的。我肯定项目会被添加到列表中(通过并看到它们)。删除了那行代码以避免再次出现,谢谢。 – Jim 2013-03-18 17:55:51

+0

“这不起作用”是什么意思?你期望什么?你看到了什么?第一个下拉列表是否将AutoPostBack设置为true? – Igor 2013-03-18 17:57:20

1日设定的base_ddl

AutoPostBack="True"属性,然后

secondary_ddl.Items.Clear(); 
IList<InfoContainer> info = getInfoBasedOnSelected(base_ddl.Value); 
secondary_ddl.DataTextField = "name"; 
secondary_ddl.DataValueField = "value"; 
secondary_ddl.DataSource = info; 
secondary_ddl.DataBind(); 
+0

AutoPostBack是必需的属性。添加解决了问题。谢谢 – Jim 2013-03-18 18:04:35