Asp.net DropDownList-列表中的第一项未正确发回,但所有其他项都正常工作

Asp.net DropDownList-列表中的第一项未正确发回,但所有其他项都正常工作,asp.net,drop-down-menu,Asp.net,Drop Down Menu,我有一个下拉列表: <asp:DropDownList id="ddlSort" runat="server" EnableViewState="true" OnSelectedIndexChanged="ApplyFilters" AutoPostBack="True"> <asp:ListItem Value="0">Sort By Relevancy</asp:listitem> <asp:ListItem Value="1">S

我有一个下拉列表:

<asp:DropDownList id="ddlSort" runat="server" EnableViewState="true" OnSelectedIndexChanged="ApplyFilters" AutoPostBack="True">
   <asp:ListItem Value="0">Sort By Relevancy</asp:listitem>
   <asp:ListItem Value="1">Sort By Product Code</asp:listitem>
   <asp:ListItem Value="2">Sort By Product Description</asp:listitem>
   <asp:ListItem Value="3">Sort By Price - Lowest</asp:listitem>
   <asp:ListItem Value="4">Sort By Price - Highest</asp:listitem>
</asp:dropdownlist>
然后,在选择任何其他选项后,选择“按相关性排序”将正常工作,但选择第一个选项不会正常工作(如第一个示例所示)

我正在使用ASP.NET2.0

  • 我已经检查了控件层次结构,并且所有控件的视图状态都已启用
  • 我尝试过显式设置EnableViewState=“true”,但没有成功
  • 有没有人有任何想法,因为我在这个问题上看到的所有信息都指向视图状态是错误的,并且在更新面板中-在我的情况下,这两种情况都不正确


    编辑:目前我已将一个虚拟条目作为第一个条目输入,但这并不理想。

    这是预期的行为

    您的事件是
    OnSelectedIndexChanged
    ,如果打开下拉列表并选择已选择的选项,asp.net将不会将其检测为更改

    只有在选择不同的值时,才会触发
    OnSelectedIndexChanged

    我建议设置一个默认值,就像在第二个示例中一样,只是更具可读性:

    <asp:DropDownList id="ddlSort" runat="server" EnableViewState="true" OnSelectedIndexChanged="ApplyFilters" AutoPostBack="True">
       <asp:ListItem Value="-1">Select Sort order</asp:listitem>
       <asp:ListItem Value="0">Sort By Relevancy</asp:listitem>
       <asp:ListItem Value="1">Sort By Product Code</asp:listitem>
       <asp:ListItem Value="2">Sort By Product Description</asp:listitem>
       <asp:ListItem Value="3">Sort By Price - Lowest</asp:listitem>
       <asp:ListItem Value="4">Sort By Price - Highest</asp:listitem>
    </asp:dropdownlist>
    

    ViewStateMode=在下拉列表中启用或在web中启用ViewStateMode。配置恐怕您描述的代码是完全标准的。你是否调试过以查看是否检测到错误?@MMK-你读了我文章的最后2点了吗?@ClaudioRedi-我不确定要调试什么。页面发回,但不调用ApplyFilter。中间部分似乎被打破了,我认为你不能正确地阅读我的文章。我说-我选择了其他东西,然后再次选择选项1,它不会调用ApplyFilter。我不应该有一个伪造的条目作为第一个条目来修复这个问题。该值是根据Url中的一个值选择的,该值“应该”在ApplyFilters中设置。您是说,在您的第一次选择时,它会调用
    ApplyFilters
    ,而当您选择第一个选项时,它不会?这似乎不太可能,我就是这么说的。如果选择了其他任何一个选项,则在选择该选项并重新选择第一个选项后,它不会调用ApplyFilter(但会回发)。
    <asp:DropDownList id="ddlSort" runat="server" EnableViewState="true" OnSelectedIndexChanged="ApplyFilters" AutoPostBack="True">
       <asp:ListItem Value="-1">Select Sort order</asp:listitem>
       <asp:ListItem Value="0">Sort By Relevancy</asp:listitem>
       <asp:ListItem Value="1">Sort By Product Code</asp:listitem>
       <asp:ListItem Value="2">Sort By Product Description</asp:listitem>
       <asp:ListItem Value="3">Sort By Price - Lowest</asp:listitem>
       <asp:ListItem Value="4">Sort By Price - Highest</asp:listitem>
    </asp:dropdownlist>
    
    if (!Page.IsPostBack)
    {
       ddlSort.Text = 0;
    }