2

私は Web サイトのコメント システムに取り組んでおり、ポストバックごとに、このページに関連するデータベース内のすべてのコメントに対して、ページがユーザー コントロール (ucComment と呼ばれる) を生成します。各 ucComment には、個々のコメントに返信できる [返信] ボタンがあります。

新しいコメントが作成されるたびに、次のポストバックですべてのページのコントロール ID がオフセットされることに最終的に気付いたとき、Respond ボタンが何もしないという問題がありました。つまり、ctl00_Content_ctl00_ctl01_ctl0 7 _lbtnRespond をクリックすると、そのコントロールは実際には次のポストバックでctl00_Content_ctl00_ctl01_ctl0 8 _lbtnRespond として生成されます。したがって、ctl07 に関連付けられたイベントは発生しません。

Web をいじっているときに、ClientID のオーバーライドについて読みました。コントロールに好きな名前を付けることができれば、問題を回避できると思いました。 http://west-wind.com/Weblog/posts/4605.aspx 素晴らしいハックのように見えましたが、ページで生成された ID とコントロールでの ID の表現方法が一致しないため、イベントは発生しません。木。

MasterPage から派生して、上記のハックをポストバックで機能させるためにコントロール ツリーが機能する方法を変更した人もいます: http://www.netquarry.com/index.php/2009/03/master-pages-ajax -and-javascript-10292/ しかし、計り知れない影響があるのではないかと心配しています。

特定のコメントに応答し、そのポストバックでコントロールの名前が変更された場合でも応答イベントが引き続き発生するように、コメント システムを機能させるにはどうすればよいですか?

4

2 に答える 2

2

私は、NetQuarry で MasterPage 派生クラスを作成した担当者です。

問題が解決したかどうかはわかりません。私の MasterPage アプローチに関するあなたの懸念は確かに理解できます。壊れやすいのではないかと心配でした。しかし、私たちのプラットフォーム上に構築された約 6 つの異なる Web アプリケーションで、約 1 年半の間、うまく機能しています。とはいえ、それらはすべて当社のプラットフォーム上に構築されているため、特定の類似点があります。.Net 2.0 から .Net 3.5 に移行したときも、コードは問題なく動作し続けました。

しかし最近、このアプローチは UpdatePanels では機能せず、状況を改善できていないことがわかりました。その問題を調査しているときに、.Net 4.0 は .Net 3.5 よりもはるかに優れた ClientID の制御を提供することを発見しました。3.5 では、この種の問題を修正するのは非常に簡単であると思います。これについては、Scott Guthrie の優れた記事をご覧ください。

http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids-vs-2010-and-net- 4-0-series.aspx

編集: この場合、関連するコメント レコードの主キーに基づいて一意の ID を使用して各コメント応答ボタンをレンダリングするだけで、問題を解決できる可能性があることがわかりました。そうすれば、ポストバック時に既存の各ボタンの ID が変更されることはありません。

これが役に立てば幸いです。

カム

于 2010-10-01T18:54:47.927 に答える
0

ユーザー コントロールの生成に使用されるサーバー側のコードを投稿できる可能性はありますか? そして、それらをホストする aspx ページは?

于 2010-08-17T21:37:11.527 に答える