イベントハンドラはprotectedにしないとマークアップのクラスからは参照できません。
ButttonコントロールのClickイベントを例として説明します。
どういうこと?
- ビハインドコードにイベントハンドラ(Button_Click)を作成し、アクセス修飾子をprivateまたはinternalにします。
- マークアップのコードに以下のように記述します。
<asp:Button ID="Button1" Text="Button" OnClick="Button_Click" />
- 実行すると、"CS0103: 名前 'Button_Click' は現在のコンテキスト内に存在しません。"の例外が発生します。
どうして?
aspxのクラスはビハインドコードのクラスを継承しています。Hoge.aspxだとすると、継承関係は以下のようになります。
Hoge.aspx → Hoge.aspx.cs → System.Web.UI.Pageクラス
どうすれば?
- アクセス修飾子をprotectedにします。publicでも参照できますが、スコープはできるだけ限定します。
または、
- ビハインドコードのクラス内で完結するようにします。
Button1.Click += Button_Click;