我有这个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。
有没有人有任何想法,因为我在此看到的所有信息都指向视图状态为false并且在更新面板中 - 在我的情况下都不是这样。
编辑:我现在已经把一个虚拟条目作为第一个条目,但这并不理想。
答案 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;
}