3

私は ASP のバックグラウンドから来て、ASP.NET を学んでいます。AutoEventWireup プロパティがコントロール イベント (Button_Click など) をワイヤアップするのか、それともページ イベントだけをワイヤアップするのかを知りたいと思いました。SO の他の場所で、TRUE に設定して明示的なイベント ハンドラーを指定すると、2 回実行されることを読みました。Falseに設定するユースケースを教えてください。

コードサンプルをいただければ幸いです

4

2 に答える 2

3

通常は true に設定されています。つまり、それぞれを明示的に関連付ける必要はありません。複数のコントロール/イベントに同じイベント ハンドラーを使用する場合は、false に設定します。その場合、複数のイベントを単一のイベント ハンドラに明示的に関連付けることができます。すべてのイベントを制御します。プロパティを true に設定し、イベントを明示的に関連付けると、デリゲートが 2 回登録されるため、.Net はイベントを 2 回発生させます。

于 2012-11-08T12:33:26.617 に答える
1

AutoEventWireup要素に対してPage、予想される署名と命名規則 (つまり ) に一致するメソッドを探すことによって機能しPage_<event>ます。見つかった場合、ページ フレームワークは、通常どおりイベントを「発生させる」前に、イベント ハンドラを直接呼び出します。これが、コードでイベント ハンドラーを登録すると、効果的に 2 回呼び出される理由です。

これは、イベント ハンドラの通常の動作とはかなり異なります。ハンドラーを同じイベントに 2 回登録するコードを記述した場合、イベントごとに 1 回だけ呼び出されます。これは、イベント ハンドラーが本質的に一連のデリゲートであり、同じメソッドにデリゲートを追加しようとしても何も起こらないためです。

このAutoEventWireup動作は、ページによって発生したイベントにのみ適用されます。他のコントロールでは取得できないため、通常はPage_InitまたはPage_Loadイベントで手動で接続する必要があります。

使用しない場合AutoEventWireup(つまり、"false" に設定する場合)、ページ イベント ハンドラーを自分で接続して呼び出しを取得する必要があります。これは、イベント登録コードを生成する Visual Studio デザイナーが行うことです。

于 2012-11-08T12:51:30.617 に答える