私は ASP のバックグラウンドから来て、ASP.NET を学んでいます。AutoEventWireup プロパティがコントロール イベント (Button_Click など) をワイヤアップするのか、それともページ イベントだけをワイヤアップするのかを知りたいと思いました。SO の他の場所で、TRUE に設定して明示的なイベント ハンドラーを指定すると、2 回実行されることを読みました。Falseに設定するユースケースを教えてください。
コードサンプルをいただければ幸いです
私は ASP のバックグラウンドから来て、ASP.NET を学んでいます。AutoEventWireup プロパティがコントロール イベント (Button_Click など) をワイヤアップするのか、それともページ イベントだけをワイヤアップするのかを知りたいと思いました。SO の他の場所で、TRUE に設定して明示的なイベント ハンドラーを指定すると、2 回実行されることを読みました。Falseに設定するユースケースを教えてください。
コードサンプルをいただければ幸いです
通常は true に設定されています。つまり、それぞれを明示的に関連付ける必要はありません。複数のコントロール/イベントに同じイベント ハンドラーを使用する場合は、false に設定します。その場合、複数のイベントを単一のイベント ハンドラに明示的に関連付けることができます。すべてのイベントを制御します。プロパティを true に設定し、イベントを明示的に関連付けると、デリゲートが 2 回登録されるため、.Net はイベントを 2 回発生させます。
AutoEventWireup
要素に対してPage
、予想される署名と命名規則 (つまり ) に一致するメソッドを探すことによって機能しPage_<event>
ます。見つかった場合、ページ フレームワークは、通常どおりイベントを「発生させる」前に、イベント ハンドラを直接呼び出します。これが、コードでイベント ハンドラーを登録すると、効果的に 2 回呼び出される理由です。
これは、イベント ハンドラの通常の動作とはかなり異なります。ハンドラーを同じイベントに 2 回登録するコードを記述した場合、イベントごとに 1 回だけ呼び出されます。これは、イベント ハンドラーが本質的に一連のデリゲートであり、同じメソッドにデリゲートを追加しようとしても何も起こらないためです。
このAutoEventWireup
動作は、ページによって発生したイベントにのみ適用されます。他のコントロールでは取得できないため、通常はPage_Init
またはPage_Load
イベントで手動で接続する必要があります。
使用しない場合AutoEventWireup
(つまり、"false" に設定する場合)、ページ イベント ハンドラーを自分で接続して呼び出しを取得する必要があります。これは、イベント登録コードを生成する Visual Studio デザイナーが行うことです。