2010-12-08 3 views
0

データソースにバインドするaspxページにドロップダウンリストがあります。私は、最初の項目を選択しても、選択された索引変更イベントが発生しなかったことに気付きました。答えを探すために設定する最も一般的なことは、ddlの最初の項目を空の文字列か "--- Select ---"のように置くことでした。ドロップダウンリストとそれ以降のイベントの最初の項目の選択に対処する

素晴らしいです。しかし、私はまだそれが私のPage_Loadイベントを発射したことに気づいた。私のPage_Loadイベントでは、私はポストバックをチェックします。そうでなければ、リピータとddlにデータバインドします。つまり、ddlの最初の項目を選択すると、リピータとddlへのデータバインディングがスキップされ、空白のページが表示されます。

私は最初にviewstateを有効にすることでこれを解決できると思っていましたが、残念です。ここでは、私は自分のコードに次のように書いていますが、実際にはハッキリに見えると感じています。誰か良いアイデアはありますか?

if (!IsPostBack || RacesDropDownList.SelectedIndex == 0) 
{ 
    PopulateControls(); 
} 

答えて

0

まず、viewstateを有効にする必要があります。ポストバックが発生していない場合は、ドロップダウンリストをデータソースにデータバインドする必要があります。単にPage_Loadイベントに以下を追加して、それを実行します。

if (!IsPostBack) 
{ 
    PopulateControls(); 
} 

は、デフォルトのselectedIndexが常に0であることを、覚えておいて、それが変更された場合、その後、ポストバックはので、あなたの元のコードがすでにスキップされます起こります!IsPostBack条件のためにデータバインディング=> '|| RacesDropDownList.SelectedIndex == 0 'は必要ありません。

その後、リストを更新する必要がある場合は、PopulateControls()関数をPage_Load()ではなくイベントハンドラで起動してください。私はこれが役に立てば幸い

protected SelectedIndexChanged(...) 
{ 
// Do something 
changeCounter++; 

// Not necessary, but good to have 
ClearControlsCurrentValues(); 

// Populate the control again 
PopulateControls(); 
} 

:たとえば

+0

うん、それだ!今では '|| RacesDropDownList.SelectedIndex == 0 'を読み込みます。ありがとうございました! –

関連する問題