ASP.NET DropDownList SelectedIndex不会更改第一个元素

dan*_*son 2 c# asp.net

我曾经认为我的c#编程并不是太糟糕,但今天我正在认真地质疑我的头脑,这么小的东西正在打败我......

我试图让DropDownList表现出来,但我们今天没有开始.我在ascx控件中有一个简单的DropDownList,它被动态加载到aspx页面中

<asp:DropDownList ID="ddl_SortBy" runat="server" AutoPostBack="true">             
  <asp:ListItem Value="0">Sort Alphabetically A to Z</asp:ListItem>
  <asp:ListItem Value="1">Sort Alphabetically Z to A</asp:ListItem>
</asp:DropDownList>
Run Code Online (Sandbox Code Playgroud)

和一些代码背后..

    private short SortBy = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        this.ddl_SortBy.SelectedIndex = -1;
        this.ddl_SortBy.SelectedIndexChanged += new EventHandler(ddl_SortBy_SelectedIndexChanged);

        if (!IsPostBack)
            SearchDirectory();
    }

    public void ddl_SortBy_SelectedIndexChanged(object sender, EventArgs e)
    {
        SortBy = Convert.ToInt16(this.ddl_SortBy.SelectedItem.Value);
        SearchDirectory();
    }
Run Code Online (Sandbox Code Playgroud)

我永远无法获得第一个触发所选索引更改事件的项 - 因为未调用SearchDirectory()函数.我可以理解,可能的情况是,当控件加载第一个项目IS时,所以在选择时,索引实际上并没有改变.

我已经尝试将所选项目索引设置为-1,并在页面加载时设置ClearSelection(),但没有运气.

有任何想法吗?谢谢

Tim*_*ter 6

您总是SelectedIndex在每次回发时重置为-1:

this.ddl_SortBy.SelectedIndex = -1;
Run Code Online (Sandbox Code Playgroud)

所以也把它放在回发检查中:

if (!IsPostBack)
{
    this.ddl_SortBy.SelectedIndex = -1;
    SearchDirectory();
}
Run Code Online (Sandbox Code Playgroud)