0

ユーザーが一連の質問をナビゲートすると、コントロールが動的に生成されるページがあります。

フォームに記入したら、送信ボタンをクリックします。入力した情報を収集してデータベースに保存します。

現在、私はこれらのコントロールのいくつかを作成しています

.AutoPostBack = True

その結果、ユーザーがテキストとタブを次のフィールドに変更するたびに、ポストバックが発生し、次のフィールドはフォーカスを失います。

設定したら

.AutoPostBack = False

その後、フォーカスの問題はなくなりますが、最後にデータを収集すると、まだ投稿されていないため、これらのコントロールにユーザーが入力したものは実際にはクライアント側のコードで使用できません。

次のいずれかを実行したいと思います。

  1. 最後に1つの大きなポストバックがあります
  2. コントロールを離れるときに、コントロールへのフォーカスを失うことなく、標準のポストバックを使用できます
  3. 私が考えていなかった他の何か...?

助言がありますか?

4

2 に答える 2

2

これらをいじってからしばらく経ちましたが、動的コントロールを再度追加する必要があったことを思い出します(ページの読み込み、または初期化?忘れました)。動的に追加された各コントロールに対して、それが発生したときと同じIDを保証したことを確認します。 ViewStateからユーザーが入力したデータにアクセスする前に、が追加されました。

また、SessionStateを使用して追加したものを追跡したことを思い出し、ViewState用に何を構築する必要があるかを理解しました。

それは、今それを説明しているように聞こえるのと同じように、それをやっているのと同じようにぎこちなく感じました。幸運を。

于 2012-05-17T20:49:44.980 に答える
2

動的に作成されたコントロールの鍵は、ページのライフサイクルでコントロールを追加するときです。ビューステートを保持し、動的コントロールに投稿された値を維持させるには、遅くとも。までにコントロールを追加する必要がありますOnInit()

さらに、ポストバックの有無にかかわらず、ページが読み込まれるたびにコントロールを再追加する必要があります。@KennyZが各コントロールに同じIDを保証することについて言ったことに関しては、同じ数のコントロールを同じ順序で追加している限り、.NETはIDが同じであることを保証します。

プロパティに関してはAutoPostBack、これは通常、ユーザーがコントロールの値を変更することによってトリガーされるアクションを実行する場合にのみTrueに設定されます。一般的な例はドロップダウンリストです。ユーザーが選択した内容に応じて、たとえばページの詳細セクションに異なるデータが読み込まれます。したがって、ユーザーが値を変更するたびに、ポストバックして新しいデータをフェッチして表示する必要があります。

私のユースケースの理解から、フォーム全体に対して1つのポストバックを提案します。

于 2012-05-17T21:25:16.040 に答える