0

次のシナリオがあります。

  1. UserControlA<asp:Button id="bSomeid" onClick="AddItem" />には、 の買い物かごへのアイテムへのコード付きのが含まれていAddItemます。
  2. UserControlBには、イベントのページにLinkButton動的に選択を追加するいくつかの が含まれています。UserControlAOnClick

これはすべて で行われますUpdatePanel。もう少し複雑ですが、問題の原因と思われる情報を絞り込みました。必要に応じて情報を追加します。

私が抱えている問題はAddItemLinkButton.

なぜこれが起こっているのか理解しています.onclickに戻って次の投稿のイベントを登録するのはページサイクルの後半です.しかし、誰かがこれを回避する方法を考えることができますか? 次のポストバックでイベントを強制的にトリガーすることはできますか? でコードを実行する方法を考えてみましたpage_loadが、 で にアクセスする必要がsenderありonClickます。

.NET 4.0 を使用しています。

編集

Page_Load で ( を使用してRequest.Form["__EVENTTARGET"];) リクエストを送信するリンク ボタンを取得する方法を見つけることができたので、コードをPage_loadイベントに移動しました。それでも2回のクリックが必要なので、onClickが遅れて登録されたこととは関係ないと思います。

イベントを適切に投稿するためにボタンが 2 回のクリックを必要とする可能性があるその他の一般的なチェック事項はありますか?

4

2 に答える 2

0

「イベントを適切に投稿するためにボタンが 2 回のクリックを必要とする原因となる一般的なチェック項目は他にありますか?」

コントロールを 2 回クリックする必要がありますか、それとも、画面上の別の場所で 1 回のクリックを受け入れてから、コントロールを 1 回クリックして最初に起動する必要がありますか?

Updatepanel に私自身の (同様の) 問題があり、最初の (予想される) トリガーが起動せず、他の場所で 1 回クリックしたように見え、その後、後続のトリガーが最初に起動します (合計 2 回のクリック)。

[編集] あなたはこの ATM に取り組んでいるので、私にも役立つかもしれません。トリガーイベントのあるテキストボックスはありますか? これを空白のままにしておくと (発火しないように)、2 回目のクリックは必要ありません。

于 2013-01-09T13:18:24.087 に答える
0

ページのライフサイクルが遅れているという疑いがある場合は、ScriptManager.RegisterAsyncPostBackControlメソッドを使用して、リンクボタンのクリックで動的に追加されたコントロールを登録してみてください。ボタンがユーザーコントロール内にあることを考慮して、パブリックメソッドを追加する必要がありますUserControlA。実際にボタンを登録し、ボタンbSomeid1をクリックするUserControlBと、実際にAコントロールのメソッドが呼び出されます。

編集

ボタン クリックが発生しないもう 1 つの原因として、ポストバックが発生したときに動的コントロールであるボタンがページ階層に追加されていないことが考えられます (または、ポストバック データが既に処理されているときに、ページ ライフ サイクルの非常に遅い段階でボタンが追加されました)。本当に完全に証明されたソリューションは、動的コントロールをそれ自体でページ階層に戻す必要がありますpage_load(また、階層内で同じコントロール ID を厳密に維持する必要があります)。それが不可能な場合は、リクエスト ( Request.Form) をスニッフィングしてポストバックを検出できます。

あなたの場合、ボタンが実際にクリックごとにポストバックを引き起こしているかどうかを確認する必要があります。はいの場合、最初のリクエストの POST データ ( Request.Form) は何ですか? 最初のクリック (およびポストバック) の __EVENTTARGET 値は何ですか? これでトラブルシューティングが開始されます。

一方、単純な回避策は、html アンカー要素を使用し (リンク ボタンを引き続き使用できます)、クリック イベントに JavaScript ハンドラーを配置して、隠し変数を設定し、フォームを送信することです (フォームをシミュレートできます)。非表示のボタンをクリックして、ASP.NET クライアント側の送信パイプラインをトリガーします)。これで、隠し変数の値をポストバックで使用して、どのリンク ボタンがクリックされたかを判断できるようになりました。

于 2013-01-08T09:31:12.167 に答える