Peter Bucher - Mein Experiment, meine Spielereien, meine Welt...   ·   Stefan Falz   ·   Jürgen Gutsch   ·   Golo Roden   ·   ASP.NET Zone   ·   Microsoft ASP.NET
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Attribute an WebControls anhaengen und Fallen

Attribute sind toll, Attribute sind schön... doch sie können auch täuschen!

Ein Beispiel:
Wir haben einen Button und möchten diesem ein "onclick" Attribut verpassen, um clientseitiger Javascript Code auszuführen.
Seit der Version 2.0 von ASP.NET gibt es beim Button Control eine neue Eigenschaft "OnClientClick", mit setzen dieser Eigenschaft
passiert das gleiche, wie wenn per "<Control>.Attributes.Add(<Name>, <Value>)" gearbeitet wird.

Code:

ASPX

<asp:Button ID="btnTest" Text="Klick mich!" OnClientClick="alert('Test...');" runat="server" />

 

C#

this.btnTest.Attributes.Add("onclick", "alert('Test..');");

 

VB.NET

Me.btnTest.Attributes.Add("onclick", "alert('Test..');")

 

Tipp: Mit einem "return false;" am Schluss des Javascript Codes kann ein PostBack vermieden werden.

 

Nun, das funktioniert wunderbar.
Aber was ist, wenn wir Attribute an andere Controls hängen wollen?

Bei einer CheckBox und einem RadioButton kommt anstelle von...

<input id="chkTest" type="checkbox" onchange="alert('Test..');" name="chkTest" /><label for="chkTest">Check mich..</label>

...dieser Output

<span onchange="alert('Test..');"><input id="chkTest" type="checkbox" name="chkTest" /><label for="chkTest">Check mich..</label></span>

 

Das ist natürlich nicht gut, das Attribut gehört in diesem Fall in den Input-Tag, sonst funktioniert das nicht.
Die CheckBox und der RadioButton haben neben der Attributes Collection noch zwei weitere Attribut Collections. InputAttributes und LabelAttributes.
Wie die Namen schon sagen, sind diese Attribute jeweils für den Input-Tag oder den Label-Tag.

Wenn Attribute zu InputAttributes Collection hinzugefügt werden, resultiert das in folgenden - gewünschten - Code:

<input id="chkTest" type="checkbox" name="chkTest" onchange="alert('Test..');" /><label for="chkTest">Check mich..</label>

 

Attribute direkt im ASPX Code hinzufügen
Ja, Attribute können auch direkt im deklerativen Code eingegeben werden.
bspw:

<asp:DropDownList ID="dropTest" onchange="alert(this.value);" runat="server">
    <asp:ListItem Text="1" />
    <asp:ListItem Text="2" />
</asp:DropDownList>

 

Das funktioniert wunderbar, ASP.NET rendert das Attribut wie es geschrieben wurde, in den Select-Tag.
Jedoch meldet sich Visual Studio mit folgender Warnung:

Validation (ASP.Net): Attribute 'onchange' is not a valid attribute of element 'DropDownList'

Das hat auch einen Benutzer in den Microsoft Newsgroups beunruhigt.
Diese Warnung kann jedoch ohne Probleme übersehen werden, wenn es denn korrekt ist :-)

Veröffentlicht Freitag, 12. Oktober 2007 21:48 von Peter Bucher

Kommentare

# re: Attribute an WebControls anhaengen und Fallen

Hallo Peter,

da bin ich am Ende aber besser beraten, wenn ich jQuery dazu bemühe, um meine clientseitigen Events zu "verwalten".

Sonntag, 22. März 2009 08:24 by Rene Drescher-Hackel
Anonyme Kommentare sind nicht zugelassen