動的に追加された Control サブクラスを使用して Control.ViewState にアクセスするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/130705

  •  02-07-2019
  •  | 
  •  

質問

Control クラスの ViewState プロパティを介してデータを永続化する必要があるコントロールを作成しました。私たちのクラスのサブクラスは、ViewState プロパティ (Page オブジェクトで保護されています) へのアクセスを厳密に制御します。OnInit で Page.Controls にコントロールを追加し、OnPreLoad で ViewState プロパティを設定しようとします。

ページの ViewState をデコードして調べるとき、値は書き出されておらず、したがって後で取得することはできません。

コントロールを ViewState プロセスに参加させる方法を知っている人はいますか?

役に立ちましたか?

解決

問題は、コントロールをページに直接追加することです。残念ながら、これはコントロール階層の上位にありすぎて、フォームの ViewState 処理に参加できません。実際の ASPNet フォームの Controls コレクションのどこかにコントロールを追加すると、そのコントロールは LoadViewStateRecursive および SaveViewStateRecursive に正常に参加します。

他のヒント

OnInit でコントロールを作成し、OnLoad 中に Page.Controls に追加してみてください。

ViewState は OnInit の後、OnLoad の前までロードされません。

ページのライフサイクルの大まかな概要は次のとおりです(グレッグマック)私の以前の質問への回答としてこれを投稿しました。

  • 初期化する
  • ロードビューステート
  • ポストバックデータのロード
  • 通話制御 ロードイベント
  • ロードイベントの呼び出し
  • 通話制御イベント
  • プリレンダーの制御
  • プリレンダー
  • ビューステートの保存
  • アンロード

  • ライセンス: CC-BY-SA帰属
    所属していません StackOverflow
    scroll top