DropDownList - 列表中的第一个项目没有正确回发,但所有其他项目都有效

时间:2012-08-15 13:59:34

标签: asp.net drop-down-menu

我有这个DropDownList:

<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>

我设置的选项最初是在if (!Page.IsPostBack)的Page_Load中选择的,默认为“0”。如果我选择Sort By Product Code(或任何其他选项),则会毫无问题地致电ApplyFilters。如果我然后将Drop Down更改为第一个选项,则会触发AutoPostBack,但它不会进入ApplyFilters代码。

如果我将标记更改为:

<asp:DropDownList id="ddlSort" runat="server" EnableViewState="true" OnSelectedIndexChanged="ApplyFilters" AutoPostBack="True">
   <asp:ListItem Value="-1">First Option</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>

然后选择“按相关性排序”将在选择任何其他选项后正常工作但是选择“第一选项”不会(如第一个示例中所示)。

我正在使用ASP.NET 2.0。

  1. 我检查了控件层次结构,并为所有控件启用了视图状态。
  2. 我尝试过显式设置EnableViewState =“true”而没有任何成功。
  3. 有没有人有任何想法,因为我在此看到的所有信息都指向视图状态为false并且在更新面板中 - 在我的情况下都不是这样。

    编辑:我现在已经把一个虚拟条目作为第一个条目,但这并不理想。

1 个答案:

答案 0 :(得分:0)

这是预期的行为。

您的活动为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>

如果您有默认排序顺序,则可以在页面加载

上进行设置
if (!Page.IsPostBack)
{
   ddlSort.Text = 0;
}