Zwei eigentlich triviale Dinge, die gerne untergehen und auch bei so manchem Entwickler, der schon einige Zeit mit ASP.NET arbeitet, unbekannt sind, sind die zwei "gespaltenen Persönlichkeiten" von Panel- und Label-Webcontrol.
Warum gespalten? Weil beide Controls jeweils zwei unterschiedliche HTML-Tags bzw. HTML-Tag-Kombinationen rendern können.
Panel-Control I
Das Panel rendert in allen aktuellen Browsern ein Div-Element. So wird aus
<asp:Panel id="MyPanel" runat="server">Inhalt</asp:Panel>
im Browser dann
<div>Inhalt</div>
Panel-Control II
Fügt man nun aber noch das Attribut GroupingText hinzu, dann wird aus dem Panel ein Fieldset, samt zugehöriger Legende.
<asp:Panel id="MyPanel" runat="server" GroupingText="Legende">Inhalt</asp:Panel>
Ergebnis:
<fieldset>
<legend>Legende</legend>
Inhalt
</fieldset>
Label-Control I
Aus einem Label wird normalerweise ein Span, ein sogenanntes Inline-Element:
<asp:Label id="MyLabel" runat="server">Inhalt</asp:Label>
Ergebnis:
<span>Inhalt</span>
Label-Control II
Fügt man nun noch das Attribut AssociatedControlID hinzu und gibt als Value die ID eines (existierenden) Formular-Controls (etwa TextBox oder DropDownList), dann wird aus dem WebControl Label ein echtes HTML-Label.
<asp:Label id="MyLabel" runat="server" AssociatedControlID="TextBox1">Inhalt</asp:Label>
Ergebnis:
<label for="TextBox1ClientID">Inhalt</label>
Fazit
Wirklich zwei winzig kleine Dinge mit doch großer Wirkung. So kann man mittels eines Fieldsets ein Formular durchaus sinnvoll strukturieren und übersichtlicher machen, die Labels sorgen dann dafür, dass etwa Textbox-Beschriftungen auch maschinenlesbar (Stichwort "Accessibility"!) ihren Textboxen zugeordnet werden. Zu guter Letzt noch der obligatorische Link zu SelfHTML.