2011-07-12 8 views
3

次のコードでは、viewstateが無効で、ビューステートが値の追跡を終了した後にコントロールが構築されているため、ドロップダウンリストがポストバック間で選択された値をどのように記憶しているか説明できます。ポストバックにわたる制御値の永続性

DropDownList ddl; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    ddl = new DropDownList() {AutoPostBack = true, EnableViewState = false, ViewStateMode = ViewStateMode.Disabled }; 
    ddl.Items.Add(new ListItem("1")); 
    ddl.Items.Add(new ListItem("2")); 
    div.Controls.Add(ddl); 
} 
+0

多分その魔法を使う? –

答えて

1

のViewStateをサーバーにポストの値を保持するために使用されていません。これは、ビューステートでクライアントに最後に提供されたときに選択された値を保持するために使用されますが、これは選択された変更などのサーバー側のイベントを生成できるだけです。ただし、現在の値は、コントロールがサーバーに通知した内容によって決まります。 DropDownListはIPostBackDataHandlerを実装しています。これは、ASP.NETサーバーコントロールが自動的にポストバックデータを読み込むために実装する必要があるメソッドを定義します。

また、DropDownListの現在の値はViewStateから取得されず、ポストされたフォーム値から取得されます。値を保持する必要がない場合は、コントロールツリーに追加した後に、選択したインデックスを0(またはデフォルトインデックスが何であれ)に設定します。これを追加した後で行うことは重要です。投稿された値は、コントロールツリーに追加するときに読み込まれます。

+0

私はあなたがviewstateに関するいくつかの誤解を持っていると思います。この記事http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspxは、viewstateが実際に行うこととしないことを説明するのに優れています。 –

関連する問題