0

次の DropDownList コントロールがあります。

<asp:DropDownList ID="SubjectFilter" runat="server" AutoPostBack="True" onselectedindexchanged="SubjectFilter_SelectedIndexChanged"></asp:DropDownList>

SubjectFilterデータ:

BookStore b = new BookStore();
b.LoadFromXML(Server.MapPath("list.xml"));

SubjectFilter.DataSource = b.BooksList.Select(x => x.Subject).Distinct().ToArray();
SubjectFilter.DataBind();
SubjectFilter.Items.Insert(0, new ListItem("הכל", "Default"));

すべてがうまくロードされます。ただし、SubjectFilter_SelectedIndexChangedメソッドでは、別のオプションを選択していても、SubjectFilter.SelectedValue常にです。Default

何が問題ですか?どうもありがとうございました。

4

4 に答える 4

2

PageLoad上記のコードはイベントからのものだと思います。if(!isPostBack)それをブロックでラップしたい場合があります。

于 2010-03-25T16:59:43.483 に答える
1

ViewStateは、ASP.NETページのInitとLoadの間に割り当てられます。イベントハンドラーはロード後に発生します。ユーザーが使用するコントロールにプログラムでコンテンツを設定する場合は、ViewStateが適用される前にそれを処理する必要があります。つまり、Page_Initに移動します。その後、ViewStateが起動し、ハンドラーの実行時にユーザーが実際に選択したものが表示されます。

于 2010-03-25T17:02:02.597 に答える
1

が falsePage_Loadの場合にのみドロップダウンにデータを入力するようにしてください。IsPostBack

例えば

 public void Page_Load(...)
 {
      if (!IsPostback())
          UpdateDisplay();
 }
于 2010-03-25T17:00:28.727 に答える
1

いつドロップダウンをバインドしますか? If(page.ispostback ==false) でラップすることもできます。その値を確認する前に、ページの読み込み時にバインドしているようです..

于 2010-03-25T17:01:08.073 に答える