3

我有这个下拉列表:

<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)默认为“0”的 Page_Load 中初始选择。如果我选择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" 没有任何成功。

有没有人有任何想法,因为我在这方面看到的所有信息都表明视图状态是错误的并且在更新面板中 - 在我的情况下,这两者都不是真的。

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

4

1 回答 1

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;
}
于 2012-08-15T14:07:21.327 回答