在Asp.net中级联DropDownList

时间:2017-01-24 03:12:31

标签: c# asp.net

让我先说明这是我努力学习更多C#/ .net和web开发的一部分。所以这可能是显而易见的,但我没有看到它。

我正在尝试创建级联DropDownList。我已经看过几个例子,但他们似乎都在查询数据库以获取他们的条目。我的要简单得多。根据第一个下拉列表的值,我将手动填充第二个下拉列表。但是,我似乎没有让OnSelectedIndexChange开火。至少,DropDownList1_SelectedIndexChanged似乎没有被执行。

这是HTML:

<asp:ScriptManager ID="ScriptManager2" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:DropDownList ID="DropDownList1" runat="server" style="z-index: 1; margin-top: 40px; width: 150px" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true">
        </asp:DropDownList><br/>
        <asp:DropDownList ID="DropDownList2" runat="server" style="z-index: 1; margin-top: 10px; width: 150px">
        </asp:DropDownList><br/>
    </ContentTemplate>
</asp:UpdatePanel>

这是C#:

        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        TextBox2.Text = "Changed";
        DropDownList1.Items.Clear();
        switch (DropDownList1.Text)
        {
            case "Caesar Tools":
                DropDownList2.Items.Add("Caesar Bruteforce");
                DropDownList2.Items.Add("ROT-1");
                DropDownList2.Items.Add("ROT-2");
                DropDownList2.SelectedIndex = 1;
                break;
            case "ASCII Tools":
                DropDownList2.Items.Add("Decimal to ASCII");
                DropDownList2.Items.Add("Hex to ASCII");
                DropDownList2.Items.Add("Binary to ASCII");
                DropDownList2.SelectedIndex = 0;
                break;
            default:
                break;
        }
    }

我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

嗯,你的代码中确实有一个bug /拼写错误。如果您更仔细地查看方法DropDownList1_SelectedIndexChanged,您会发现此行可疑。

DropDownList1.Items.Clear();

我的猜测是,当DropDownList1控件中的选择发生更改时,您希望清除 DropDownList2 控件的项目,而不是 DropDownList1 控件。

我已在下面附上了标记和代码,供您参考。

ASPX加价

<asp:ScriptManager runat="server" ID="sm1"></asp:ScriptManager>

        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:DropDownList ID="DropDownList1" runat="server" Style="z-index: 1; margin-top: 40px; width: 150px" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true">
                        <asp:ListItem Text="" Value=""></asp:ListItem>
                        <asp:ListItem Text="Caesar Tools" Value="Caesar Tools"></asp:ListItem>
                        <asp:ListItem Text="ASCII Tools" Value="ASCII Tools"></asp:ListItem>
                    </asp:DropDownList><br />
                    <asp:DropDownList ID="DropDownList2" runat="server" Style="z-index: 1; margin-top: 10px; width: 150px">
                    </asp:DropDownList><br />
                </ContentTemplate>
            </asp:UpdatePanel>

ASPX.cs代码背后

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList2.Items.Clear();
            switch (DropDownList1.Text)
            {
                case "Caesar Tools":
                    DropDownList2.Items.Add("Caesar Bruteforce");
                    DropDownList2.Items.Add("ROT-1");
                    DropDownList2.Items.Add("ROT-2");
                    DropDownList2.SelectedIndex = 1;
                    DropDownList2.DataBind();
                    break;
                case "ASCII Tools":
                    DropDownList2.Items.Add("Decimal to ASCII");
                    DropDownList2.Items.Add("Hex to ASCII");
                    DropDownList2.Items.Add("Binary to ASCII");
                    DropDownList2.SelectedIndex = 0;
                    DropDownList2.DataBind();
                    break;
                default:
                    break;
            }
        }

希望这有帮助。