4

AutoEventWireupによるリフレクション検索ページメソッドを使用しますpage_eventName

msdn

AutoEventWireupがtrueの場合、ハンドラーは実行時に名前と署名に基づいてイベントに自動的にバインドされます。ASP.NETは、イベントごとに、Page_LoadやPage_InitなどのパターンPage_eventnameに従って名前が付けられたメソッドを検索します。

質問 :

彼はすべての要求に対してそれをしますか?

私はtemporary internet filesMicrosoft.netフォルダーで...)を調べて、明示的なハンドラーの添付ファイルを含む別のファイルを保存しているかどうかを確認しましたが、何も見つかりませんでした。

4

1 に答える 1

4

@Marcが言ったように、ASP.NETはそのためにキャッシュを使用しているようです。内部を参照してくださいTemplateControl.HookUpAutomaticHandlers

dotPeekを使用したこのメソッドの一部:

internal void HookUpAutomaticHandlers()
{
  ...
  object obj = TemplateControl._eventListCache[(object) this.GetType()];
  if (obj == null)
  {
    lock (TemplateControl._lockObject)
    {
      obj = TemplateControl._eventListCache[(object) this.GetType()];
      if (obj == null)
      {
        IDictionary local_1_1 = (IDictionary) new ListDictionary();
        this.GetDelegateInformation(local_1_1);
        obj = local_1_1.Count != 0 ? (object) local_1_1 : TemplateControl._emptyEventSingleton;
        TemplateControl._eventListCache[(object) this.GetType()] = obj;
      }
    }
  }
  ...

プライベートGetDelegateInformationメソッドは、コントロールのデリゲートの作成を担当します。 テンプレート コントロールごとにデリゲートを保持する ですTemplateControl._eventListCacheHashtable

だから、あなたの質問に答える:

彼はすべての要求に対してそれを行いますか?

答えはノーだ。ASP.NET はこれを 1 回実行して thisHashtableを設定し、キャッシュされた値を使用します。

于 2012-11-14T14:13:52.687 に答える