読者です 読者をやめる 読者になる 読者になる

プログラマーな日々

プログラマーをやっています。好きなツール:WorkFlowy、好きな言語:C#、好きなサービス:Backlog、好きなAWS:AWS Lambda。

イベントハンドラはprotectedにしないとマークアップからは参照できない

.NET ASP.NET

イベントハンドラはprotectedにしないとマークアップのクラスからは参照できません。
ButttonコントロールのClickイベントを例として説明します。

どういうこと?

  1. ビハインドコードにイベントハンドラ(Button_Click)を作成し、アクセス修飾子をprivateまたはinternalにします。
  2. マークアップのコードに以下のように記述します。
<asp:Button ID="Button1" Text="Button" OnClick="Button_Click" />
  1. 実行すると、"CS0103: 名前 'Button_Click' は現在のコンテキスト内に存在しません。"の例外が発生します。

どうして?

aspxのクラスはビハインドコードのクラスを継承しています。Hoge.aspxだとすると、継承関係は以下のようになります。
Hoge.aspx → Hoge.aspx.cs → System.Web.UI.Pageクラス

どうすれば?

  • アクセス修飾子をprotectedにします。publicでも参照できますが、スコープはできるだけ限定します。

または、

  • ビハインドコードのクラス内で完結するようにします。
Button1.Click += Button_Click;