ここでページのライフサイクルの基本的な概念を見落としているように感じ、(正しいキーワードがわからないか、質問されていないために)既存の回答を見つけることができなかったので、許してください。これは尋ねられました。
基本的に、クライアント側とサーバー側の間で可変オブジェクトを永続化する必要があります。ビューステートは暗号化/シリアル化されており、セッション状態はサーバー側のみであるため、私の解決策は隠しフィールドを使用することでした-簡単ですよね?これが私の問題です...それは機能しているように見えますが、データは私が期待したように伝播されていません。
私の期待はこれでした:
- ページが初めて読み込まれます。サーバー側のクラスは、非表示フィールドが空であることを認識し、コンテナークラスを初期化し、クラスをJSON文字列にシリアル化し、その値を非表示フィールドに書き込みます。
- Page_Init:使用できません。
- Page_Load:使用できません。
- Page_LoadComplete:利用可能です。
- サーバーの処理が完了し、オブジェクトをクライアントコードで使用できるようになりました。
- 非表示フィールドのオブジェクトは、クライアントコードによって変更されます。次に、クライアントコードは、(ボタンを介して)サーバーへのポストバックを起動します。
- サーバー側の処理が開始されます...
- Page_Init:使用できません。
- Page_Load:クライアント側の変更を含めて利用可能です。
- Page_LoadComplete:クライアント側の変更を含めて利用可能です。
- 世界はすべて正しいです。窓の外に二重の虹が輝いていて、魔法のユニコーンが私にウインクとうなずきを与えてくれます。
私の観察はこれです:
- ページが初めて読み込まれます。サーバー側のクラスは、非表示フィールドが空であることを認識し、コンテナークラスを初期化し、クラスをJSON文字列にシリアル化し、その値を非表示フィールドに書き込みます。
- Page_Init:使用できません。(予想通り)
- Page_Load:使用できません。(予想通り)
- Page_LoadComplete:利用可能です。(予想通り)
- サーバーの処理が完了し、オブジェクトをクライアントコードで使用できるようになりました。
- 非表示フィールドのオブジェクトは、クライアントコードによって変更されます。次に、クライアントコードは、(ボタンを介して)サーバーへのポストバックを起動します。
- サーバー側の処理が開始されます...
- Page_Init:使用できません。(予想通り)
- Page_Load:使用可能ですが、クライアント側で行われた変更で更新されません。(予期しない)。
- Page_LoadComplete:クライアント側の変更を含めて利用可能です。(予想通り)
- 私のキュービクルの上に暗い雲が形成され、私のラップトップが2階のバルコニーから落ちても生き残ることができるかどうかを考え始めます。
結論
これは、いくつかの理由で私を少し混乱させています... 1つ目は、「LoadComplete」イベントをこれまで使用したことがなく、必要であること、または必要であることを示唆する例が見つからないことです。そのようにした。2つ目は、負荷が完了するまでに、クライアント側からのデータに依存する他のイベントがすでに発生していることです。
ヘルプ/説明/提案; 地獄、批判さえありがたいです!
ありがとう、ジェイソン