In SelectedIndexChanged herausfinden, welcher Button gedrückt wurde - ohne JavaScript

Written on April 08, 2004

Man stelle sich folgendes Problem vor:

Eine DropDownList mit AutoPostBack = true, ein paar TextBoxen und zwei Buttons, einer zum Abschicken der Änderungen der DropDownList - falls kein JavaScript aktiviert ist - und ein weiterer zum Abschicken des Formulars. Dazu noch die Situtation, dass Javascript tatsächlich nicht aktiv ist.

Frage in der ASP.NET-Mailingliste: Wie finde ich jetzt heraus, welcher Button geklickt wurde - und zwar bereits im SelectedIndexChanged der DropDownList?

Der Clou hierbei ist - wie das aktivierte Tracing zutage bringt - dass das Event SelectedIndexChanged der DropDownList vor dem Clicked-Event der Buttons verarbeitet wird...

Wie kommen wir nun also an die Info, welcher Button geklickt wurde?

Die Lösung liegt in der KeysCollection von Request.Form, welche die beim Post übermittelten Formularelemente beinhaltet. Und HTML übermittelt Buttons, die nicht geklickt werden, beim Post nicht. D.h. also, dass wir einfach in dieser Collection nachsehen müssen, welcher Button dort erscheint:

private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
{
foreach(string key in Request.Form.Keys)
{
if((key=="Button2")||(key=="Button1"))
{
Response.Write(key + " gedrückt");
}
}
}