2011-07-22 16 views
0

私は、ポストバックの後にドロップダウンリストで利用可能な項目については疑問があります。ASP.NETポストバック後にドロップダウンリスト項目はどのように使用できますか?

私はDropDownListコントロールから派生するカスタムWebサーバーコントロールを作成しました:

public class StateListControl : DropDownList 
{ 
    public StateListControl() 
    { 
     this.Items.Add(new ListItem("New York", "NY")); 
     this.Items.Add(new ListItem("Nebraska", "NE")); 
     this.Items.Add(new ListItem("Texas", "TX")); 

    } 
} 

私は、ページにコントロールを追加、Page_Loadイベントに次のでした:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     StateListControl1.Items.Add(new ListItem("Michigan", "MI")); 
    } 
} 

今、この項目がしますポストバックがないときに追加されます。私は、添付されたイベントのないボタンコントロールを追加しました。

ボタンを繰り返しクリックすると、すべてのポストバック後に4番目のエントリが表示されます。

疑問は、ドロップダウンリストに4番目のアイテムが保存されている情報がどこにあるのかという疑問です。そのアイテムは、最初のリクエストでのみ追加され、繰り返しポストバックしても利用できますか?

答えて

2

最初のページの読み込みでは、ドロップダウンリストに4つの値がすべて設定され、これらはビューステートに格納されます。ページをポストバックすると、ドロップダウンリストが再び初期化され、値がビューステートからロードされます。サーバーサイドのロードイベントでは、ドロップダウンリストの値に変更が加えられていないため、値はviewstateの4つのエントリとして残ります。

ドロップダウンのviewstateを無効にすると、ページが読み込まれるたびに初期化コードが実行されるかどうかによって、ポストバック時に3つのエントリしか利用できないことがわかります。

+0

あなたの答えは正しいですか? – Jake

+0

私はそうでないと誰かがコメントしていると思います。 –

2

コントロールには、ViewStateに似たControlStateがあり、ポストバック時に情報を保持します。

ControlState vs. ViewState

+0

私はこの回答が正しいとは思わない。コントロール状態には、具体的な指示がない限り、ドロップダウンの値は格納されません。 –

1

新しいリスト項目を追加する場合 - それは、ドロップダウンリストに追加され、ビューステートに保存されます。

関連する問題