これはASP.NETで使用される命名規則であり、.NET全体で広く使用されている別の一般的な命名規則と同じように見えます。明らかな類似性にもかかわらず、これら2つの規則は無関係です。
ここでは無関係であることが判明した.NET全体の規則では、イベントには、イベントを発生させる対応するメソッドがあり、それらのメソッドの名前はOn
、イベント名にプレフィックスを追加することによって形成されるのが一般的です。たとえば、Click
によって提供されるイベントは、そのイベントを発生させるメソッドにButton
関連しOnClick
ています(ここで別の回答ですでに述べられているように)。
紛らわしい部分は、OnClick
メソッドが質問に関係する属性とは何の関係もないということです。OnClick
OnSomeEvent
このようなメソッドを持たないコントロールを作成することで、ここでメソッドが無関係であることを簡単に示すことができます。単純なユーザーコントロールの背後にあるコードは次のとおりです。
public partial class EventWithoutMethod : System.Web.UI.UserControl
{
public event EventHandler Foobar;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Foobar != null)
{
Foobar(this, EventArgs.Empty);
}
}
}
Foobar
これにより、イベントが宣言されます。(実際に発生することはありませんが、探索の目的には関係ありませんOnFoobar
。)メソッドを定義するものではありません。それでも、ASP.NETはOnSomeEvent
、コントロールを使用するときに規則を使用できることを完全に喜んでいます。
<user:EventWithoutMethod runat="server" OnFoobar="FooHandler" />
実際、私たちがそれを行うことは幸せであるだけでなく、実際にそれを必要とします。コントロールで呼び出されるメンバーが定義されていなくてもOnFoobar
(イベントは単に呼び出されます)、ファイルからイベントハンドラーをアタッチする場合Foobar
は、書き込む必要があります。イベントをアタッチするために属性をそこに配置しただけでは、ハンドラーは実行されません。(残念ながら、ASP.NETはそれを実行してもエラーを生成せず、属性に対して何も実行せず、イベントハンドラーは実行されません。)OnFoobar
.aspx
Foobar