2

私はこれが答えられたと確信していますが、私はそれを見つけることができません...おそらく用語が非常に多くの異なる質問に使用されているためです.とにかく.

ポストバックなどでの動的コントロールの構築に関する情報を init イベントに保存する最良の方法はどのようにすればよいでしょうか...

たとえば、古典的な「アンケート」のシナリオを考えてみましょう...question.aspx?id=1

  1. クエリ文字列から ID を取得する
  2. どこからでも質問を読み込んでコントロールを動的に構築するか、各質問のユーザーコントロールを動的に追加して、質問の数などを指定します
  3. ページの投稿が返されます (ユーザーが送信を押したと思います!)
  4. 初期化イベントで...質問コントロールを再作成するためにIDをどこに保存したはずですか?

これまでに試したこと/考えたこと:

  • ページに関連するため、最初に値をビューステートに保存しましたが、ビューステートの値はページの初期化では使用できません (または??)
  • 隠し変数を作成し、フォーム コレクションの値にアクセスする
  • session - session を使いたくありません。問題があると思われます。たとえば、ユーザーが 2 つのアンケートを表示した場合はどうなりますか?
  • クエリ文字列をもう一度?しかし、それを変更するのは簡単すぎるように思えますし、動的コントロールは意味をなさないでしょう...
  • コントロール自体で?たとえば、アンケート ID をすべて無視して、単に質問 ID から外れてしまうのでしょうか?? コントロール ID は、controlQ1、controlQ2 などの controlQ# のような形式であると仮定します。これは、各質問 ID が一意でなければならないことを意味します

ヘルプ/ガイダンスなどは大歓迎です!!!

4

2 に答える 2

1

クエリ文字列はポストバック中も引き続き使用できるため、そこから ID を取得できます。

ユーザーがクエリ文字列パラメーターを操作することを懸念している場合は、ポストバック中にクエリ文字列の正確性を確認できるようにするパラメーターをいくつか追加する必要があります。簡単な例として、ID パラメータと現在のセッション ID の MD5 ハッシュを追加し、ポストバック中にそのチェックサムを再作成/比較できます。

于 2010-01-17T23:18:45.240 に答える
0

ページOnLoadでユーザーコントロールを作成/ロードしようとします。ユーザーコントロール内にロードする場合、他のユーザーコントロールは OnInit イベントを使用します。

ポストバック中にユーザーコントロールを再インスタンス化するために必要な情報の永続化には、viewstate を使用します。ポストバック データをコントロール ツリーにマップするには、同じコントロール ツリーがあることを確認する必要があります。そのマッピングの後、コントロールツリーを変更できます(他のコントロールをロードするなど)

contols-id: はい、一意の ID を指定する必要があります。そうしないと機能しません。質問をデータベースに保存する場合、これにデータベースの主キーを使用しても問題はないはずです。たとえば、質問-1、質問-2 (コントロール) などの名前を付けます。

于 2010-01-17T12:49:47.450 に答える