Dies ist eine Benennungskonvention, die von ASP.NET verwendet wird und die, was nicht hilfreich ist, mit einer anderen allgemeinen Namenskonvention identisch ist, die in .NET weit verbreitet ist. Trotz der offensichtlichen Ähnlichkeit sind diese beiden Konventionen nicht miteinander verwandt.
Die .NET-Wide-Konvention, die hier irrelevant ist, ist, dass Ereignisse normalerweise entsprechende Methoden haben, die das Ereignis auslösen, und dass die Namen dieser Methoden durch Hinzufügen eines On
-Präfixes gebildet werden Veranstaltungsname. Zum Beispiel bezieht sich das Click
Ereignis, das von Button
angeboten wird, auf eine Methode, die dieses Ereignis auslöst (wie bereits in einer anderen Antwort hier angegeben).
Das verwirrende Teil ist, dass die OnClick
Methodenichts mit dem OnClick
Attribute zu tun, dass die Frage betrifft.
Es ist einfach zu zeigen, dass die OnSomeEvent
Methoden hier irrelevant sind, indem Sie ein Steuerelement schreiben, das keine solche Methode hat. Hier ist der Code-Behind für eine einfache Benutzersteuerung:
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);
}
}
}
Dies erklärt ein Foobar
Ereignis. (Es erhöht es nie wirklich, aber das ist für die Zwecke der Erforschung nicht wichtig.) Es nicht eine OnFoobar
Methode definieren. Dennoch ist ASP.NET vollkommen glücklich für uns, die OnSomeEvent
Konvention zu verwenden, wenn wir die Kontrolle verwenden:
<user:EventWithoutMethod runat="server" OnFoobar="FooHandler" />
In der Tat, es ist nicht nur glücklich für uns, das zu tun, ist es tatsächlich erfordert es. Auch wenn meine Kontrolle kein Mitglied definiert, heißt OnFoobar
- das Ereignis heißt nur Foobar
- Ich muss OnFoobar
schreiben, wenn ich den Ereignishandler aus meiner .aspx
Datei anhängen möchte. Wenn ich nur ein Foobar
-Attribut darin einlege, das Ereignis anzuhängen, wird der Handler nie laufen. (Nicht hilfreich, ASP.NET generiert keinen Fehler, wenn Sie das tun, es führt nur nichts mit dem Attribut zu tun, und der Event-Handler wird nie ausgeführt.)