【问题标题】:Dynamically populating a dropdownlist based on selected value in another dropdown list根据另一个下拉列表中的选定值动态填充下拉列表
【发布时间】:2013-03-18 17:53:20
【问题描述】:

我有两个下拉列表,其中一个在页面加载时填充,另一个应仅在第一个中选择值时填充。第一个下拉列表定义为:

<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 函数动态更新该下拉列表以用于另一个下拉列表?

【问题讨论】:

  • 首先,当您向其中添加项目时,您不需要在第二个下拉列表中使用 Databind。并检查您的清单是否有任何价值?
  • @Samim 我不这么认为,这是在调试时添加的。我很肯定项目会被添加到列表中(单步执行并看到它们)。删除了那行代码以避免再次出现,谢谢。
  • “这不起作用”是什么意思?你期待什么,你看到了什么?第一个下拉菜单是否将 AutoPostBack 设置为 true?
  • @Igor UI 下拉列表未填充,即使我看到“secondary_ddl.Items.Add(...)”行被多次调用。
  • 那么其他东西必须从中删除项目 - 无论是服务器端还是客户端。

标签: c# asp.net


【解决方案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();

【讨论】:

  • AutoPostBack 是必需的属性。添加解决了问题。谢谢
猜你喜欢
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
相关资源
最近更新 更多