コメントページを作ってみました。データベースから以前に作成されたコメントを取得し、新しいコメントを送信するためのテキスト ボックスがあります。データベースから古いコメントを表示するには、それらを動的に追加する必要がありますよね? 最初は、TheContainerControl.Controls.Add(TheComment) のようなものを使用していましたが、ページがポストバックされると (新しいコメントが送信されるか何か)、動的に追加したものはすべてなくなってしまいます! これを回避するために、代わりに TheContainerControl.InnerHtml("[html]") を使用しました。そうすれば、ページがポストバックされたときに、動的に追加したコントロールが失われることはありません。ただし、.InnerHtml を介して追加したコントロールにイベント ハンドラーを追加する方法を 9 時間または 10 時間近く探していましたが、何も見つかりませんでした :( それらをまったく参照しないと、.FindControl() は null 参照を返します。また、イベントをトリガーするコード/スクリプトを手動で挿入しようとしましたが、惨めに失敗しました (私は jQuery を初めて使用し、javascript をほとんど知りません)。できれば助けてください。
3 に答える
ページに再度追加しているこれらの古いコメントは、クリックなどの DOM イベントに応答するこれらの UI 要素ですか、それとも単に表示するためだけにあるラベルですか? それらが表示のためだけにある場合は、Brian が上で述べたように、動的コントロールの代わりに Repeater r GridView または ListView を使用することをお勧めします。
実際にはそれらがコントロール要素であっても、GridView のテンプレート列にドロップして、ページネーションなどを処理させることができます。jQuery ライブ イベントを使用して、これらのコントロールを操作できます。
または、ASP.NET Ajax と更新パネルを使用して、ポストバックで絶対に更新する必要があるページの部分のみを更新し、他の部分はそのままにします。
コードを投稿していただけると助かります。
代わりに、動的な数のコメントを表示するように構築された Repeater、GridView、または ListView などのコントロールを使用する方がはるかに簡単です。
ポストバックごとに動的コントロールをページに戻す必要があります。
何を言っているのかわかりません:「.InnerHtml を介して追加したコントロールにイベント ハンドラーを追加する方法を 9 時間から 10 時間近く探していましたが、何も見つかりませんでした :( できません」それらをまったく参照しないと、.FindControl() は null 参照を返します。また、イベントをトリガーするコード/スクリプトを手動で挿入しようとしましたが、惨めに失敗しました" - JQuery はこれにどのように適合しますか?クライアントまたはサーバー?
HTH。
ページにコントロールを動的に追加するときに Asp.net で注意する必要があるのは、ページのライフ サイクルです。コントロールを追加して、次のポストバック後もそれらを永続化できる時期については非常に特殊です。または、コントロールを追加してレンダリングできるまでの時間。
ページを動的に構築する人々の一般的な傾向は、自分のコードを Page_Load() に配置し始めることですが、これはライフサイクルにおいて遅すぎます。Init (または Page_Init)を試してみてください。
他の人が示唆しているように、コントロールを動的に追加するのではなく、組み込みの Asp.net コンテンツ コントロールをいくつか歌って、ページの動的状態を管理することを検討することもできます。その場でページを構築できる他の Web フレームワーク/テクノロジから来た場合、Asp.net は少し複雑に見えることがあります。ページ ライフ サイクルと Asp.net コントロールを利用する方法を習得すれば、ページ上のすべての要素の状態を手動で管理する必要はありません。