Ich habe mich nun schon das zweite Mal von ASP.NET hereinlegen lassen und meine Zeit damit vergeudet ein und demselben
"Phänomen" auf die Spur zu kommen, daß es nun an Zeit ist einmal darüber zu schreiben. Vielleicht kann ich es mir dann
besser merken. Die Rede ist vom Einsatz von User-Controls in Repeatern.
Meine Webs basieren sehr stark auf Repeatern, weil ich zum einen die volle Kontrolle über den erzeugten Markup
behalten möchte und zum anderen, weil ich die Inline-Style-Orgien, die man verursacht, wenn man vorgefertigte Controls wie
das GridView verwendet und dabei dessen Attribute zum "Formatieren" der Ausgabe benutzt, ablehne. Styles gehören für mich
in eingebundene CSS-Dateien.
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<div class="myclass">
<a href="<%#Eval("LinkUrl")%>"><%#Eval("LinkText")%></a>
</div>
</ItemTemplate>
</asp:Repeater>
Genauso wichtig ist für mich ein gerüttelt Maß an "Code-Normalisierung", d.h. immer wiederkehrende Elemente sollten in
User-Controls zusammengefasst und vereinheitlicht werden. So braucht man kleine Änderungen am Layout nicht x-Mal durchzuführen,
sondern man passt einmal das Control an und fertig. Alle Daten, die das Control benötigt, werden dabei über Properties von außen
übergeben und zum Beispiel im Markup des Control über Inline-Code in den auszugebenden Markup eingesteuert.
<%@ Control
Language="VB"
AutoEventWireup="false"
CodeFile="MyControl.ascx.vb"
Inherits="controls_MyControl" %>
<div class="myclass">
<a href="<%=Me.LinkUrl%>"><%=Me.LinkText%></a>
</div>
Beide Vorgehensweisen zusammen haben allerdings einen kleinen aber feinen Haken, wenn man den Repeater in der Hauptseite
belassen muss und mit der Methode Eval("Feldname"), der Kurzform von Eval(Container.DataItem, "Feldname"),
dem User-Control die Daten übergeben möchte. Schauen wir uns mal eine 1:1-Umsetzung der Hauptseite des Beispiels an: