3

ここでページのライフサイクルの基本的な概念を見落としているように感じ、(正しいキーワードがわからないか、質問されていないために)既存の回答を見つけることができなかったので、許してください。これは尋ねられました。

基本的に、クライアント側とサーバー側の間で可変オブジェクトを永続化する必要があります。ビューステートは暗号化/シリアル化されており、セッション状態はサーバー側のみであるため、私の解決策は隠しフィールドを使用することでした-簡単ですよね?これが私の問題です...それは機能しているように見えますが、データは私が期待したように伝播されていません。

私の期待はこれでした:

  1. ページが初めて読み込まれます。サーバー側のクラスは、非表示フィールドが空であることを認識し、コンテナークラスを初期化し、クラスをJSON文字列にシリアル化し、その値を非表示フィールドに書き込みます。
    • Page_Init:使用できません。
    • Page_Load:使用できません。
    • Page_LoadComplete:利用可能です。
  2. サーバーの処理が完了し、オブジェクトをクライアントコードで使用できるようになりました。
  3. 非表示フィールドのオブジェクトは、クライアントコードによって変更されます。次に、クライアントコードは、(ボタンを介して)サーバーへのポストバックを起動します。
  4. サーバー側の処理が開始されます...
    • Page_Init:使用できません。
    • Page_Load:クライアント側の変更を含めて利用可能です。
    • Page_LoadComplete:クライアント側の変更を含めて利用可能です。
  5. 世界はすべて正しいです。窓の外に二重の虹が輝いていて、魔法のユニコーンが私にウインクとうなずきを与えてくれます。

私の観察はこれです:

  1. ページが初めて読み込まれます。サーバー側のクラスは、非表示フィールドが空であることを認識し、コンテナークラスを初期化し、クラスをJSON文字列にシリアル化し、その値を非表示フィールドに書き込みます。
    • Page_Init:使用できません。(予想通り)
    • Page_Load:使用できません。(予想通り)
    • Page_LoadComplete:利用可能です。(予想通り)
  2. サーバーの処理が完了し、オブジェクトをクライアントコードで使用できるようになりました。
  3. 非表示フィールドのオブジェクトは、クライアントコードによって変更されます。次に、クライアントコードは、(ボタンを介して)サーバーへのポストバックを起動します。
  4. サーバー側の処理が開始されます...
    • Page_Init:使用できません。(予想通り)
    • Page_Load:使用可能ですが、クライアント側で行われた変更で更新されません。(予期しない)。
    • Page_LoadComplete:クライアント側の変更を含めて利用可能です。(予想通り)
  5. 私のキュービクルの上に暗い雲が形成され、私のラップトップが2階のバルコニーから落ちても生き残ることができるかどうかを考え始めます。

結論

これは、いくつかの理由で私を少し混乱させています... 1つ目は、「LoadComplete」イベントをこれまで使用したことがなく、必要であること、または必要であることを示唆する例が見つからないことです。そのようにした。2つ目は、負荷が完了するまでに、クライアント側からのデータに依存する他のイベントがすでに発生していることです。

ヘルプ/説明/提案; 地獄、批判さえありがたいです!

ありがとう、ジェイソン

4

3 に答える 3

2

これが他の誰かを数時間節約するのに役立つことを願って、私はこれに答えています。多くの試行と最終的な成功の後、OnInitイベント中にHiddenField値を取得できることを学びました。IDがhidValueのHiddenFieldが与えられた場合、キーラインは次のようになります。

string strValue = Request.Form[hidValue.UniqueID].ToString();
于 2014-01-07T11:58:20.470 に答える
1

私はASP.NETライフサイクルでたくさんの髪を引き裂きました:-)。私はあなたにこれをアドバイスします:

  • 制御イベントにバインド
  • ページイベントへのバインドまたはオーバーライドを回避する

この場合、HiddenFieldページ/ユーザーコントロールで保護を宣言する必要があります。したがって、本当にValueChangedイベントにバインドし、残りのことは忘れたいと思います。

于 2012-09-11T13:48:32.967 に答える
1

説明
javascriptの値 を更新HiddenFieldして、サーバーに戻すことができます。
後にオブジェクトを使用できるようにする場合はLoad、を使用しても問題ありませんLoadComplete
ロード時にすべてのコントロールでこのオブジェクトを使用できるようにする場合、入力からデータを取得できる最も早い方法はPreLoad、オブジェクトをオーバーロードしてそこに作成することです。
ロジックに問題はありません。

結論
それの実装にはいくつかのバグがあります。
ここでコードを見てみましょう。

于 2012-09-11T13:19:46.163 に答える