Dotlab – Development and other evil things


ASP.net DefaultButton im Panel mit FF3/Safari

Veröffentlicht in .net Stuff von dotlab am Dezember 12, 2008
Tags: , , , ,

Wer auf einer ASPX Seite mehrere Controls (.ascx) laufen lässt, ist vielleicht schon auf die Problematik gestossen, dass in mehreren Controls Eingaben des Benutzers notwendig sind. Wird die Eingabe innerhalb eines Controls mit Enter bestätigt, feuert anstelle des gewünschten Click Events jedoch ein beliebiger Button auf der Seite.

Nebst der Möglichkeit, dieses Problem mit eigenem Javascript zu umgehen, existiert seit ASP.net 2.0 eine weitaus elegantere Möglichkeit: Das DefaultButton Property im Form-Tag. Hier wird einfach die ID eines Buttons innerhalb der Form eingetragen.

Bei mehreren Controls funktioniert dies jedoch nicht mehr korrekt, da mehrere DefaultButtons definiert werden müssten (einer pro Control). Um das Problem zu umgehen, wird jedes einzelne Control in ein asp:panel gepackt, denn auch das Panel Control verfügt über das entsprechende DefaultButton Property.

Beispiel:


<asp:panel id="panel1" runat="server" DefaultButton="btnSend">

<asp:textbox id="tb1" runat="server" />

<asp:button id="btnSend" runat="server" text="Send">

</asp:panel>

Wird nun nach der Eingabe eines Strings in die Textbox Enter gedrückt, feuert automatisch der Click Event des Default Buttons. Ganz simpel also.

Es gibt allerdings eine etwas merkwürdige Einschränkung: Wird als DefaultButton ein Button vom Typ LinkButton eingetragen, funktioniert die ganze Geschichte in FF3 und Safari leider nicht mehr. Verwendet man einen normalen Button, wird der richtige Event in allen Browsern gefeuert.

Eine Antwort zu 'ASP.net DefaultButton im Panel mit FF3/Safari'

Kommentare abonnieren mit RSS oder Trackback zu 'ASP.net DefaultButton im Panel mit FF3/Safari'.

  1. GB sagte,

    Vielen Dank für den Tipp, hat super geklappt bei mir!

    Have a nice day.

    GB


Eine Antwort schreiben