3

私はこの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)デフォルトが「0」のPage_Loadで最初に選択されるようにオプションを設定しています。Sort By Product Code(またはその他のオプション)を選択するとApplyFilters、問題なく呼び出されます。次に、ドロップダウンを最初のオプションに変更すると、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" を明示的に設定しようとしましたが、成功しませんでした。

これについて私が見たすべての情報は、ビューステートがfalseであり、更新パネルにあることを示しているので、誰にもアイデアはありますか?私の場合、どちらも当てはまりません。

編集: 最初のエントリとして今のところダミーのエントリを入れましたが、これは理想的ではありません。

4

1 に答える 1

0

これは予想される動作です。

あなたのイベントはOnSelectedIndexChanged、ドロップダウンを開いてすでに選択されているオプションを選択した場合、asp.netはそれを変更として検出しません。

別の値を選択した場合にのみ、が発生しますOnSelectedIndexChanged

2番目の例のように、デフォルト値を設定して、読みやすくすることをお勧めします。

<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 に答える