Cookie Consent by Free Privacy Policy Generator website

default Postback Button in ASP.net definieren

Hat man mehrere Formular Gruppen auf einer Seite, so sollte beim Focus auf einem bestimmten Element nur das Postback Event eines bestimmten Buttons ausgelöst werden.

Ich stand schon oft vor dem Problem und hab in der Vergangenheit stehts minder erfolglos gegoogled. Die Funde beschränkten sich dann zumeist auf altbekannte Lösungen. Das bedeutet das Problem von Hand mit Javascript zu lösen, aber ich hätte dies gern innerhalb von ASP.net gelöst da JavaScript nicht immer zum Repertoire eines jeden Designers gehört, der evtl. die von mir erstellten Seiten nachträglich ändern muss, also wäre eine selbstredende Lösung innerhalb von ASP.net vom großen Vorteil.

Im Prinzip ist dies auch sehr einfach, man nehme einfach ein Panel Control, legt das um die entsprechenden Formular Controls herrum und definiert im DefaultButton Attribut des Panel Controls den Namen des Button Controls (Möglich sind alle Controls die das Interface IButtonControl implementieren wie Linkbutton, ImageButton oder Button). So siehts aus:

<asp:Panel ID="PanelName" runat="server" DefaultButton="LinkButtonName">
    ...
</panel>

Hierdurch erzeugt ASP.net bei der Ausgabe ein Clientseitiges onkeypress Event auf dem umgebenen div Element welches wiederrum die Funktion WebForm_FireDefaultButton in der WebResource.axd aufruft. Diese Funktion fragt bei jedem Tastenanschlag innerhalb des div Elements ab, ob die Entertaste gedrückt wurde und ob die Quelle ein textarea Element ist. Wenn dies alles zutrifft, wird ganz simple das Click Event des mit WebForm_FireDefaultButton übergebenen Buttons ausgelöst.

 

In einer der alten ASP.net Ajax Version (damals Codename Atlas) gab es einen kleinen Bug, bei der dies nicht funktionierte. Details gibt es u.A. auf Ben S. Stahlhood II's WebLog. Falls noch jemand eine entsprechende Version nutzen sollte gibs dort ein Workaround. In der Final tritt das Problem nicht mehr auf, da es keine __defaultFired Variable mehr gibt.