1

コード ビハインドでサーバー コントロール プロパティに値を割り当てて、フォームを「初期化」したいと考えています。これらの値をビューステートに追加する必要はありません。(特定のコントロールのビューステートを無効にできることはわかっていますが、一部の値が変更される可能性があり、ポストバック中に保持する必要があるため、ビューステートが必要です。)

現時点では、これらの値をビューステートに追加せずにコードにロードすることはできないようです。

私が理解しているように、次のことが起こります。

ページ: PreInit

ここでいくつかのコントロールに値を追加できます(たとえば、テキスト値を設定するためのリテラルコントロールで機能します)が、コントロールのinitメソッドは後で実行されるため、たとえば、この段階ではまだRegisterUserコントロールとその子コントロールを見つけることができません。まだヌル。> この特定のケースでは解決策がなく、さらに多くのケースがあります

コントロール: 初期化

ページ内からこのポイントに到達できません。これは、ユーザー コントロール コード内でのみ使用できます。たとえば、独自のユーザー コントロールを作成し、その値を初期化したい場合などです。もちろん、必要なコントロールごとに独自のコントロールを作成したくありません。最初にいくつかのロジックを実行して初期化します。

コントロール: TrackViewState

Viewstate Tracking が有効になっているので、これ以降、設定したものはすべて「ダーティ」としてマークされ、viewstate に追加されます。ページ:Init ページ:TrackViewState

ですから、私は次のように言っています。

コード ビハインドでは、コントロールのビューステート プロパティを無効にせずに..

  • ビューステートに値を追加せずに、PreIinit メソッドでページ コントロールから「第 1 レベル」の子コントロール プロパティを初期化できます。
  • ビューステートに値を追加せずに、ページの「第 1 レベル」の子コントロールであるコントロールから子コントロールのプロパティを初期化することはできません。?

それで、

  • リソースを使用してコントロール プロパティを宣言的に初期化できますが、これによってロジックを実行する必要があるシナリオを回避することはできません。
  • データバインディング構文を使用してロジックを実行できますが、上記と同じ問題を持つコントロールで手動でデータバインドを呼び出す必要があります

これらの値をビューステートに追加せずに、一連のコントロール/子コントロールを反復し、コード ビハインドで値を開始する方法はありませんか?

4

1 に答える 1

1

ここでの反応はなく、さらに調査を重ねた結果、ビューステートにこれらの値を追加せずに、一連のコントロール/子コントロールを繰り返してコードビハインドで値を開始することはできないと結論付けました。理由は、質問。

ただし、ここで明らかにされているように、いくつかの部分的な解決策があります:http ://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx

1つの可能性は、コントロール自体のinitイベントに宣言的にフックすることです。これは、コントロールごとに行う必要があります。コードビハインドでは、イベントハンドラー内でプロパティを設定できますが、viewstateはまだ追跡されていないため、viewstateに保存されません。

CreateChildControlsメソッドをオーバーライドすることにより、カスタムコントロール内に動的に追加された子コントロールを初期化するなど、さまざまなシナリオに対応するオプションがさらにあります。上記の「ビューステートを真に理解する」リンクを読む価値は間違いありません。

于 2012-07-30T09:34:07.727 に答える